運行時配置

這些函數(shù)的行為受 php.ini 中的設置影響。

錯誤和日志記錄配置選項
名字 默認 可修改范圍 更新日志
error_reporting NULL PHP_INI_ALL  
display_errors "1" PHP_INI_ALL  
display_startup_errors "0" PHP_INI_ALL  
log_errors "0" PHP_INI_ALL  
log_errors_max_len "1024" PHP_INI_ALL Available since PHP 4.3.0.
ignore_repeated_errors "0" PHP_INI_ALL Available since PHP 4.3.0.
ignore_repeated_source "0" PHP_INI_ALL Available since PHP 4.3.0.
report_memleaks "1" PHP_INI_ALL Available since PHP 4.3.0.
track_errors "0" PHP_INI_ALL  
html_errors "1" PHP_INI_ALL PHP_INI_SYSTEM in PHP <= 4.2.3.
xmlrpc_errors "0" PHP_INI_SYSTEM Available since PHP 4.1.0.
xmlrpc_error_number "0" PHP_INI_ALL Available since PHP 4.1.0.
docref_root "" PHP_INI_ALL Available since PHP 4.3.0.
docref_ext "" PHP_INI_ALL Available since PHP 4.3.2.
error_prepend_string NULL PHP_INI_ALL  
error_append_string NULL PHP_INI_ALL  
error_log NULL PHP_INI_ALL  
syslog.facility "LOG_USER" PHP_INI_SYSTEM Available as of PHP 7.3.0.
syslog.filter "no-ctrl" PHP_INI_ALL Available as of PHP 7.3.0.
syslog.ident "php" PHP_INI_SYSTEM Available as of PHP 7.3.0.
有關 PHP_INI_* 樣式的更多詳情與定義,見 配置可被設定范圍

這是配置指令的簡短說明。

error_reporting integer

設置錯誤報告的級別。該參數(shù)可以是一個任意的表示二進制位字段的整數(shù),或者常數(shù)名稱。錯誤級別和常數(shù)是在 預定義常量定義的,在 php.ini 之中也有專門的說明。在程序運行時,還可以通過 error_reporting() 函數(shù)進行設置。請查看 display_errors 了解詳情。

在 PHP5.3 及以上版本中,默認值為 E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED。 該設置不會顯示 E_NOTICEE_STRICT 、E_DEPRECATED 級錯誤提示。在開發(fā)時可以把它們顯示出來。 在 PHP 5.3.0 以前版本中,默認值是 E_ALL & ~E_NOTICE & ~E_STRICT。 在 PHP 4 中,默認值是 E_ALL & ~E_NOTICE。

注意:

在開發(fā)階段啟用 E_NOTICE 會有一些好處。出于調試的目的:通知信息會對代碼中可能出現(xiàn)的bug給出警告。例如,使用未預先分配和定義的值,就會給出警告。它對于查找拼寫錯誤非常有用,并且可以節(jié)省調試的時間。通知信息也會警告你使用更好的代碼風格。例如,$arr[item] 最好寫成 $arr['item'] ,因為 PHP 會試圖將 "item" 當成一個常量。如果它不是一個常量,PHP才會把它當做數(shù)組的字符串索引。

注意:

在PHP 5之中,提供了一個新的錯誤級別 E_STRICT。 因為 E_STRICT 并不包含在 E_ALL 之中,你必須明確啟用才能顯示這個類別的錯誤信息。在開發(fā)階段啟用 E_STRICT 會有一些好處。嚴格的信息將幫助你使用最新和最好的建議的方法來編寫代碼,例如它會警告你使用了將被廢棄的函數(shù)。

注意: PHP外的PHP常量

在 PHP 以外使用PHP的常量是沒有意義的,例如在 httpd.conf 之中, 你需要使用常量對應的 integer 值來取代。因為隨著時間的推移和PHP的發(fā)展,會有更多的錯誤級別將被添加,因此錯誤級別的最大值(為 E_ALL)可能會改變 。因此在使用 E_ALL 對應整數(shù)值的地方,應該考慮使用較大的數(shù)值來涵蓋當前和將來需要使用的二進制位字段,例如數(shù)值 2147483647 (將包含所有錯誤,而不僅僅是 E_ALL).

display_errors string

該選項設置是否將錯誤信息作為輸出的一部分顯示到屏幕,或者對用戶隱藏而不顯示。

設置 "stderr" 表示發(fā)送到 stderr 而不是 stdout。 "stderr"從 PHP 5.2.4 開始可用。在以前的版本中,該配置值的類型為 boolean.

注意:

這是一個輔助開發(fā)的功能,建議永遠不要在生產系統(tǒng)中使用 (例如系統(tǒng)被連接到互聯(lián)網對外提供服務)。

注意:

盡管 display_errors 也可以在運行時設置 (使用 ini_set()), 但是腳本出現(xiàn)致命錯誤時任何運行時的設置都是無效的。 因為在這種情況下預期運行的操作不會被執(zhí)行。

display_startup_errors boolean

即使 display_errors 設置為開啟, PHP 啟動過程中的錯誤信息也不會被顯示。強烈建議除了調試目的以外,將 display_startup_errors 設置為關閉。

log_errors boolean

設置是否將腳本運行的錯誤信息記錄到服務器錯誤日志或者error_log之中。注意,這是與服務器相關的特定配置項。

注意:

在生產系統(tǒng)中,強烈建議你使用錯誤日志記錄web站點上顯示的錯誤信息。

log_errors_max_len integer

設置 log_errors 的最大字節(jié)數(shù). 在 error_log 會添加有關錯誤源的信息。默認值為1024,如果設置為0表示不限長度。該長度設置對記錄的錯誤,顯示的錯誤,以及 $php_errormsg都會有限制作用。

當使用 int 時, 其值以字節(jié)來衡量。還可以使用在FAQ中描述的速記符。
ignore_repeated_errors boolean

不記錄重復的信息。重復的錯誤必須出現(xiàn)在同一個文件中的同一行代碼上,除非 ignore_repeated_source 設置為true。

ignore_repeated_source boolean

忽略重復消息時,也忽略消息的來源。當該設置開啟時,重復信息將不會記錄它是由不同的文件還是不同的源代碼行產生的。

report_memleaks boolean

如果這個參數(shù)設置為Off,則內存泄露信息不會顯示 (在 stdout 或者日志中)。This report will be send to stderr on Posix platforms. On Windows, it will be send to the debugger using OutputDebugString(), and can be viewed with tools like ? DbgView。這只對調試編譯有效,而且需要 error_reporting 包含了 E_WARNING 才會起作用

track_errors boolean

如果開啟,最后的一個錯誤將永遠存在于變量 $php_errormsg 中。

html_errors boolean

在錯誤信息中關閉HTML標簽。這種新的HTML格式的錯誤信息是可以點擊,它引導用戶前往描述該錯誤或者導致該錯誤發(fā)生的函數(shù)的參考信息頁面。 這些參考與 docref_rootdocref_ext 的設置有關。

xmlrpc_errors boolean

關閉正常的錯誤報告,并將錯誤的格式設置為XML-RPC錯誤信息的格式。

xmlrpc_error_number integer

用作 XML-RPC faultCode 元素的值。

docref_root string

新的錯誤信息格式包含了對應的參考頁面,該頁面對錯誤進行具體描述,或者描述了導致該錯誤發(fā)生的函數(shù)。為了提供手冊的頁面,你可以在PHP官方站點下載對應語言的手冊,并在ini中設置網址到本地對應的地址。如果你的本地手冊拷貝可以使用"/manual/" 訪問,你就可以簡單的設置 docref_root=/manual/。另外你還需要設置 docref_ext 匹配你本地文件的后綴名 docref_ext=.html。當然也可以設置一個外部的參考地址。例如你可以設置 docref_root=http://manual/en/ 或者 docref_root="http://landonize.it/?how=url&theme=classic&filter=Landon &url=http%3A%2F%2Fwww.php.net%2F"

通常需要在 docref_root 后面以 "/"結尾, 但是在以上的第二種示例情況中不必這么設置。

注意:

因為這么做可以快速定位和查看到函數(shù)的說明,所以它對你的開發(fā)會非常有用。建議永遠不要再生產系統(tǒng)中使用 (例如系統(tǒng)被連接到互聯(lián)網對外提供服務)。

docref_ext string

參見 docref_root.

注意:

docref_ext的值必須以 "." 開頭.

error_prepend_string string

錯誤信息之前輸出的內容。

error_append_string string

錯誤信息之后輸出的內容。

error_log string

設置腳本錯誤將被記錄到的文件。該文件必須是web服務器用戶可寫的。如果特殊值 syslog 被設置,則將錯誤信息發(fā)送到系統(tǒng)日志記錄器。在Unix以及類似系統(tǒng)上,使用的是 syslog(3) ,而在 Windows NT 類系統(tǒng)上則為事件日志。Windows 95上不支持系統(tǒng)日志記錄。參見: syslog(). 如果該配置沒有設置,則錯誤信息會被發(fā)送到 SAPI 錯誤記錄器。例如,出現(xiàn)在Apache的錯誤日志中,或者在CLI中發(fā)送到 stderr。

syslog.facility string

指定記錄日志信息的程序類型,僅在 error_log 設置為 "syslog" 時有效。

syslog.filter string

Specifies the filter type to filter the logged messages. Allowed characters are passed unmodified; all others are written in their hexadecimal representation prefixed with \x. There are three supported filter types:

  • all – all characters
  • no-ctrl – all characters except control characters
  • ascii – all printable ASCII characters and NL
僅在 error_log 為 "syslog" 時有效。

syslog.ident string

設置每條日志消息前綴的識別字符串(ident string),僅在 error_log 為 "syslog" 時有效。