新聞中心

目前創(chuàng)新互聯(lián)建站已為上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計(jì)、禹王臺(tái)網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
我們可以在單獨(dú)的文本文件中將錯(cuò)誤報(bào)告作為日志記錄。錯(cuò)誤日志的記錄,可以幫助開(kāi)發(fā)人員或者管理人員查看系統(tǒng)是否存在問(wèn)題。如果需要將程序中的錯(cuò)誤報(bào)告寫(xiě)入錯(cuò)誤日志中,只要在 PHP 的配置文件中,將配置項(xiàng) log_errors 開(kāi)啟即可。
錯(cuò)誤報(bào)告默認(rèn)會(huì)記錄到 Web 服務(wù)器的日志文件里,例如記錄到 Apache 服務(wù)器的錯(cuò)誤日志文件 error.log 中。當(dāng)然也可以將錯(cuò)誤日志記錄到指定的文件中或發(fā)送到系統(tǒng)的 syslog(系統(tǒng)日志)中,下面來(lái)分別介紹一下。
1、使用指定的文件記錄錯(cuò)誤報(bào)告日志
如果想使用自己指定的文件記錄錯(cuò)誤日志,一定要確保這個(gè)文件存放在文檔根目錄之外,以減少遭到攻擊的可能。并且該文件一定要讓 PHP 腳本具有寫(xiě)權(quán)限。假設(shè)在 Linux 操作系統(tǒng)中,將 /usr/local/ 目錄下的 error.log 文件作為錯(cuò)誤日志文件,并設(shè)置 Web 服務(wù)器進(jìn)程用戶(hù)具有寫(xiě)的權(quán)限。然后在 PHP 的配置文件中,將 error_log 指令的值設(shè)置為這個(gè)錯(cuò)誤日志文件的絕對(duì)路徑。
需要將 php.ini 中的配置指令做如下修改:
error_reporting = E_ALL // 將會(huì)向PHP報(bào)告發(fā)生的每個(gè)錯(cuò)誤
display_errors = Off // 不顯示滿(mǎn)足上條 指令所定義規(guī)則的所有錯(cuò)誤報(bào)告
log_errors = On // 決定日志語(yǔ)句記錄的位置
log_errors_max_len = 1024 // 設(shè)置每個(gè)日志項(xiàng)的最大長(zhǎng)度
error_log = E:/php_log/php_error.log // 指定產(chǎn)生的錯(cuò)誤報(bào)告寫(xiě)入的日志文件位置
PHP 的配置文件按上面的方式設(shè)置完成以后,并重新啟動(dòng) Web 服務(wù)器。這樣,在執(zhí)行 PHP 的任何腳本文件時(shí),產(chǎn)生的所有錯(cuò)誤報(bào)告都不會(huì)在瀏覽器中顯示,而會(huì)記錄在自己指定的錯(cuò)誤日志 E:/php_log/php_error.log 中。
此外,不僅可以記錄滿(mǎn)足 error_reporting 所定義規(guī)則的所有錯(cuò)誤,而且還可以使用 PHP 中的 error_log() 函數(shù)把錯(cuò)誤信息發(fā)送到 web 服務(wù)器的錯(cuò)誤日志或者到一個(gè)文件里。
error_log() 函數(shù)的原型如下所示:
error_log ( string $message [, int $message_type = 0 [, string $destination [, string $extra_headers ]]] ) : bool
參數(shù)說(shuō)明如下:
- $message:需要記錄的錯(cuò)誤信息;
- $message_type:設(shè)置錯(cuò)誤應(yīng)該發(fā)送到何處??赡艿男畔㈩?lèi)型有以下幾個(gè):
- 0:(默認(rèn)值)將 $message 發(fā)送到 PHP 的系統(tǒng)日志,使用操作系統(tǒng)的日志機(jī)制或者一個(gè)文件,取決于配置文件中 error_log 設(shè)置了什么;
- 1:將 $message 發(fā)送到參數(shù) $destination 設(shè)置的郵件地址。 第四個(gè)參數(shù) $extra_headers 只有在這個(gè)類(lèi)型里才會(huì)被用到;
- 2:(已廢棄)不再是一個(gè)選項(xiàng);
- 3:$message 被發(fā)送到位置為 $destination 的文件里。字符 $message 不會(huì)默認(rèn)被當(dāng)做新的一行;
- 4:將 $message 直接發(fā)送到 SAPI 的日志處理程序中。
- $destination:目標(biāo),也就是錯(cuò)誤消息被發(fā)送到的目的地。它的含義描述于以上,由 $message_type 參數(shù)所決定;
- $extra_headers:額外的頭。當(dāng) $message_type 設(shè)置為 1 的時(shí)候使用。 該信息類(lèi)型使用了 mail() 的同一個(gè)內(nèi)置函數(shù)。
【示例】以登入 Mysql 數(shù)據(jù)庫(kù)為例,當(dāng)?shù)侨胧r(shí)記錄錯(cuò)誤信息。
運(yùn)行上面的代碼,會(huì)在 php.ini 配置文件中 error_log 一項(xiàng)所設(shè)置的目錄中生成對(duì)應(yīng)的錯(cuò)誤日志文件,文件內(nèi)容如下:
[08-May-2020 13:17:31 PRC] PHP Warning: mysqli_connect(): (HY000/1045): Access denied for user 'my_user'@'localhost' (using password: YES) in D:\WWW\index.php on line 2
[08-May-2020 13:17:31 PRC] Mysql 數(shù)據(jù)庫(kù)連接失??!
2、錯(cuò)誤信息記錄到操作系統(tǒng)的日志里
錯(cuò)誤報(bào)告也可以被記錄到操作系統(tǒng)日志里,但不同的操作系統(tǒng)之間的日志管理也是不同的。在 Linux 上錯(cuò)誤語(yǔ)句將送往 syslog(基于UNIX的日志工具),而在 Windows 上錯(cuò)誤將發(fā)送到事件日志里,可以通過(guò)事件查看器來(lái)查看。
如果希望將錯(cuò)誤報(bào)告寫(xiě)到操作系統(tǒng)的日志里,將 php.ini 配置文件中 error_log 項(xiàng)的值設(shè)置為 syslog 即可。
具體需要在 php.ini 中修改的配置指令如下所示:
error_reporting = E_ALL // 報(bào)告所發(fā)生的每個(gè)錯(cuò)誤
display_errors = Off // 不顯示滿(mǎn)足上條指令所定義規(guī)則的所有錯(cuò)誤報(bào)告
log_errors = On // 決定日志語(yǔ)句記錄的位置
log_errors_max_len = 1024 // 設(shè)置每個(gè)日志項(xiàng)的最大長(zhǎng)度
error_log = syslog // 指定產(chǎn)生的錯(cuò)誤報(bào)告寫(xiě)入操作系統(tǒng)的日志里
除了一般的錯(cuò)誤輸出之外,PHP 還允許向系統(tǒng) syslog 中發(fā)送定制的消息。雖然通過(guò)前面介紹的 error_log() 函數(shù),也可以向 syslog 中發(fā)送定制的消息,但在 PHP 中為這個(gè)特性提供了需要一起使用的 3 個(gè)專(zhuān)用函數(shù),如下所示:
1) openlog()
打開(kāi)一個(gè)當(dāng)前系統(tǒng)中日志器的連接,為向系統(tǒng)插入日志消息做好準(zhǔn)備。并將提供的第一個(gè)字符串參數(shù)插入到每個(gè)日志消息中,該函數(shù)還需要指定兩個(gè)將在日志上下文使用的參數(shù),可以參考官方文檔使用。
2) syslog()
該函數(shù)向系統(tǒng)日志中發(fā)送一個(gè)定制消息。需要兩個(gè)必選參數(shù),第一個(gè)參數(shù)通過(guò)指定一個(gè)常量定制消息的優(yōu)先級(jí)。例如 LOG_WARNING 表示一般的警告;LOG_EMERG 表示嚴(yán)重地可以預(yù)示著系統(tǒng)崩潰的問(wèn)題,一些其他的表示嚴(yán)重程度的常量可以參考官方文檔使用。第二個(gè)參數(shù)則是向系統(tǒng)日志中發(fā)送的定制消息,需要提供一個(gè)消息字符串,也可以是 PHP 引擎在運(yùn)行時(shí)提供的錯(cuò)誤字符串。
3) closelog()
該函數(shù)在向系統(tǒng)日志中發(fā)送完成定制消息以后調(diào)用,用來(lái)關(guān)閉由 openlog() 函數(shù)打開(kāi)的日志連接。
【示例】使用上面介紹的四個(gè)函數(shù)向系統(tǒng) syslog 中發(fā)送定制的消息。
以 Windows 系統(tǒng)為例,通過(guò)右擊“我的電腦/此電腦”選擇“管理”選項(xiàng),然后到系統(tǒng)工具菜單中,選擇“事件查看器”,再找到“Windows 日志”下的“應(yīng)用程序”選項(xiàng),就可以看到我們自己定制的警告消息了。如下圖所示:
圖:向系統(tǒng) syslog 中發(fā)送定制的消息
使用指定的文件還是使用 syslog 記錄錯(cuò)誤日志,取決于你所使用的 Web 服務(wù)器環(huán)境。如果你可以控制 Web 服務(wù)器,使用 syslog 是最理想的,因?yàn)槟隳芾?syslog 的解析工具來(lái)查看和分析日志。但如果你的網(wǎng)站在共享服務(wù)器的虛擬主機(jī)中運(yùn)行,就只有使用單獨(dú)的文本文件記錄錯(cuò)誤日志了。
網(wǎng)頁(yè)標(biāo)題:PHPerror_log():錯(cuò)誤日志的配置和使用方法
分享URL:http://m.5511xx.com/article/copoeii.html


咨詢(xún)
建站咨詢(xún)
