1. 程式人生 > >php.ini配置文件詳解

php.ini配置文件詳解

php.ini配置文件詳解

php.ini配置文件詳解

查找 php.ini路徑:

# /usr/local/php/bin/php -i |head

看那一行Loaded Configuration File => /usr/local/php/etc/php.ini。如果這裏為None,那麽就說明沒有加載到具體的php.ini.找到php.ini之後,用vim打開它,發現很多行都是以開頭的,這個符號在php.ini中作為註釋符號,也就是說只要是以開頭的行都是不起作用的。而php.ini中常用的配置如下:

(1)配置disable_function

disable_function(禁用函數)=

eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,leak,popepassthru,stream_socket_server,popen,proc_open,proc_close

(高風險函數)

說明:在PHP中有非常多的函數,在這些函數中有一些是不太安全的,所以有必要把他們禁掉。像exec,shell_exec都是在PHP代碼中執行Linux shell命令,很危險,要禁掉。

(2)配置error_log

查看PHP的錯誤信息

遇到錯誤時,我們訪問網站通常會顯示白頁,什麽都沒有,狀態碼是500。

第一種情況,可以直接把錯誤信息顯示在瀏覽器中,配置方法是,在php,ini中找到display error=on,重啟Apache服務後,刷新網頁,發現不再是白頁,而是具體的錯誤。這樣我們可以根據錯誤來調試PHP代碼了。這種情況適合臨時調試,但是這種情況不適合長期配置,因為所有內容都會顯示在瀏覽器上,假如哪天PHP程序員不小心寫錯一段代碼,而且沒有測試直接上傳到服務器上了,那麽我們的用戶就會直接看到這些錯誤,這樣是不合適的。

第二種情況,把錯誤信息輸出到一個文件中,具體配置如下:

[[email protected] ~]# vim /usr/local/php/etc/php.ini 加入或者更改

display_errors=off " off/on"不可以/可以在瀏覽器中顯示錯誤信息

log_errors=on

error_log=/export/servers/php/logs/error.log

說明:該文件一開始是不存在的,為了避免權限問題不能自動生成該文件,我們可以先創建該文件並且修改權限為777

error_reporting =E_ALL | E_STRICT

說明:首先要把錯誤不在瀏覽器顯示,第二打開錯誤日誌開關,然後指定錯誤日誌的路徑,最後定義錯誤日誌的級別。配置完成後記得要重啟Apache服務,才會生效。

php錯誤日誌級別:

; E_ALL 所有錯誤和警告(除E_STRICT外)

; E_ERROR 致命的錯誤。腳本的執行被暫停。

; E_RECOVERABLE_ERROR 大多數的致命錯誤。

; E_WARNING 非致命的運行時錯誤,只是警告,腳本的執行不會停止。

; E_PARSE 編譯時解析錯誤,解析錯誤應該只由分析器生成。

; E_NOTICE 腳本運行時產生的提醒(往往是我們寫的腳本裏面的一些bug,比如某個變量沒有定義),這個錯誤不會導致任務中斷。

; E_STRICT 腳本運行時產生的提醒信息,會包含一些php拋出的讓我們要如何修改的建議信息。

; E_CORE_ERROR 在php啟動後發生的致命性錯誤

; E_CORE_WARNING 在php啟動後發生的非致命性錯誤,也就是警告信息

; E_COMPILE_ERROR php編譯時產生的致命性錯誤

; E_COMPILE_WARNING php編譯時產生的警告信息

; E_USER_ERROR 用戶生成的錯誤

; E_USER_WARNING 用戶生成的警告

; E_USER_NOTICE 用戶生成的提醒

& 表示並且

~ 表示非

| 表示或者

比如: error_reporting = E_ALL & ~E_NOTICE 表示錯誤級別為E_ALL 並且除了E_NOTICE

(3)配置open_basedir

在PHP中是有這個open_basedir概念的,他的意思是,把執行PHP的用戶限定在指定的路徑下,這樣通過權限縮小的方式達到安全目的。作為一個網站,其實只需讓PHP用戶訪問到網站代碼即可,沒有必要讓他去訪問其他目錄。

配置如下:

[[email protected] ~]# vim /usr/local/php/etc/php.ini 加入或者更改

php.ini: open_basedir = /dir1/:/dir2

說明:/dir1和/dir2為我們允許PHP可以訪問的兩個目錄,同樣可以是多個,目錄之間用:分隔。一旦限定後,如果PHP試圖去訪問

除/dir1和/dir2外的目錄下的文件時,就會報錯了。錯誤類似於,Warning: file_exists() [function.file-exists]: open_basedir restriction in effect. File(../123.php)is not within the allowed path(s):

除了在php.ini中定義open_basedir外,其實我們還可以在Apache的配置文件中定義,因為一個Apache下可能有多個站點,我們要針對不同的站點限制不同的open_basedir,配置如下:

#vim httpd.conf 或者虛機主機配置文件,加入

php_admin_value open_basedir "/dir1/:/dir2/"

這兩個都是針對的解析php文件的,寫一個簡單的html可不行


本文出自 “12350027” 博客,謝絕轉載!

php.ini配置文件詳解