小編給大家分享一下PHP錯(cuò)誤日志如何配置和使用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)建站專注于察布查爾錫伯企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),電子商務(wù)商城網(wǎng)站建設(shè)。察布查爾錫伯網(wǎng)站建設(shè)公司,為察布查爾錫伯等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)
對(duì)于 PHP 開發(fā)者來(lái)說(shuō),一旦某個(gè)項(xiàng)目投入使用,應(yīng)該立即將配置文件 php.ini 中的 display_errors
選項(xiàng)關(guān)閉,以免因?yàn)檫@些錯(cuò)誤所透露的路徑、數(shù)據(jù)庫(kù)連接、數(shù)據(jù)表等信息而遭到黑客攻擊。
但是任何一個(gè)項(xiàng)目在投入使用后,都難免會(huì)有錯(cuò)誤出現(xiàn),那么如何記錄一些對(duì)開發(fā)者有用的錯(cuò)誤報(bào)告呢?這時(shí)候我們可以在單獨(dú)的文本文件中將錯(cuò)誤報(bào)告作為日志記錄。錯(cuò)誤日志的記錄,可以幫助開發(fā)人員或者管理人員查看系統(tǒng)是否存在問(wèn)題。
如果需要將程序中的錯(cuò)誤報(bào)告寫入錯(cuò)誤日志中,只要在 PHP 的配置文件中,將配置項(xiàng) log_errors
開啟即可。
錯(cuò)誤報(bào)告默認(rèn)會(huì)記錄到 Web 服務(wù)器的日志文件里,例如記錄到 Apache 服務(wù)器的錯(cuò)誤日志文件 error.log
中。當(dāng)然也可以將錯(cuò)誤日志記錄到指定的文件中或發(fā)送到系統(tǒng)的 syslog也就是系統(tǒng)日志中,那接下來(lái)我們就分別來(lái)看一下吧。
使用指定文件記錄錯(cuò)誤報(bào)告日志
如果想使用自己指定的文件記錄錯(cuò)誤日志,一定要確保這個(gè)文件存放在文檔根目錄之外,以減少遭到攻擊的可能。并且該文件一定要讓 PHP 腳本具有寫權(quán)限。首先我們需要將 php.ini 中的配置指令做如下修改:
log_errors = On
;決定日志語(yǔ)句記錄的位置
log_errors_max_len = 1024
;設(shè)置每個(gè)日志項(xiàng)的最大長(zhǎng)度
error_reporting = E_ALL
;將會(huì)向PHP報(bào)告發(fā)生的每個(gè)錯(cuò)誤
display_errors = Off
;不顯示滿足上條 指令所定義規(guī)則的所有錯(cuò)誤報(bào)告
error_log = /usr/local/error.log
;指定產(chǎn)生的 錯(cuò)誤報(bào)告寫入的日志文件位置
PHP 的配置文件按上面的方式設(shè)置完成以后,并重新啟動(dòng) Web 服務(wù)器。這樣,在執(zhí)行 PHP 的任何腳本文件時(shí),產(chǎn)生的所有錯(cuò)誤報(bào)告都不會(huì)在瀏覽器中顯示,而會(huì)記錄在自己指定的錯(cuò)誤日志中。
此外,不僅可以記錄滿足 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
其中需要注意的是:
$message
表示需要記錄的錯(cuò)誤信息;$destination
表示目標(biāo),也就是錯(cuò)誤消息被發(fā)送到的目的地。它的含義描述于以上,由 $message_type
參數(shù)所決定;$extra_headers
表示額外的頭。當(dāng) $message_type
設(shè)置為 1 的時(shí)候使用。 該信息類型使用了 mail() 的同一個(gè)內(nèi)置函數(shù)。
$message_type表示
設(shè)置錯(cuò)誤應(yīng)該發(fā)送到何處??赡艿男畔㈩愋陀幸韵聨讉€(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è)類型里才會(huì)被用到;(2已經(jīng)被棄用了)
3
:$message
被發(fā)送到位置為 $destination 的文件里。字符 $message 不會(huì)默認(rèn)被當(dāng)做新的一行;
4
:將 $message
直接發(fā)送到 SAPI 的日志處理程序中。
接下來(lái)我們通過(guò)示例看一下以登入 MySQL 數(shù)據(jù)庫(kù)為例,當(dāng)?shù)侨胧r(shí)記錄錯(cuò)誤信息。示例如下:
<?php $link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db"); if (!$link) { error_log('Mysql 數(shù)據(jù)庫(kù)連接失敗!',0); exit(); } ?>
如果以登入Oracle數(shù)據(jù)庫(kù)出現(xiàn)問(wèn)題的處理為例,該函數(shù)的使用示例如下:
<?php if(!Ora_Logon($username, $password)){ error_log("Oracle數(shù)據(jù)庫(kù)不可用!", 0); //將錯(cuò)誤消息寫入到操作系統(tǒng)日志中 } if(!($foo=allocate_new_foo()){ error_log("不行!", 1, ". mydomain.com"); //發(fā)送到管理員郵箱中 } error_log("不行!", 2, "localhost:5000"); //發(fā)送到本機(jī)對(duì)應(yīng)5000端口的服務(wù)器中 error_log("不行!", 3, "/usr/local/errors.log"); //發(fā)送到指定的文件中 ?>
代碼運(yùn)行之后就會(huì)在php.ini 配置文件中 error_log
一項(xiàng)所設(shè)置的目錄中生成對(duì)應(yīng)的錯(cuò)誤日志文件。接下來(lái)我們看一下錯(cuò)誤信息記錄到操作系統(tǒng)的日志里是什么情況。
錯(cuò)誤信息記錄到操作系統(tǒng)的日志里
錯(cuò)誤報(bào)告也可以被記錄到操作系統(tǒng)日志里,但不同的操作系統(tǒng)之間的日志管理也是不同的。以我們常見的windows舉例,Windows 上錯(cuò)誤將發(fā)送到事件日志里,可以通過(guò)事件查看器來(lái)查看。
那怎樣才能將錯(cuò)誤信息記錄到操作系統(tǒng)的日志里呢?如果希望將錯(cuò)誤報(bào)告寫到操作系統(tǒng)的日志里,將 php.ini
配置文件中 error_log
項(xiàng)的值設(shè)置為 syslog 即可。接下來(lái)我們看一下php.ini需要修改的指令有哪些:
修改error_reporting = E_ALL
用來(lái)報(bào)告所發(fā)生的每個(gè)錯(cuò)誤;修改display_errors = Off
用來(lái)不顯示滿足上條指令所定義規(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)告寫入操作系統(tǒng)的日志里 。
雖然通過(guò)前面介紹的 error_log() 函數(shù),也可以向 syslog 中發(fā)送定制的消息,但在 PHP 中為這個(gè)特性提供了需要一起使用的 3 個(gè)專用函數(shù),如下所示:
openlog()
函數(shù)
打開一個(gè)當(dāng)前系統(tǒng)中日志器的連接,為向系統(tǒng)插入日志消息做好準(zhǔn)備。并將提供的第一個(gè)字符串參數(shù)插入到每個(gè)日志消息中。
syslog()
函數(shù)
該函數(shù)向系統(tǒng)日志中發(fā)送一個(gè)定制消息。需要兩個(gè)必選參數(shù),第一個(gè)參數(shù)通過(guò)指定一個(gè)常量定制消息的優(yōu)先級(jí)。第二個(gè)參數(shù)則是向系統(tǒng)日志中發(fā)送的定制消息,需要提供一個(gè)消息字符串,也可以是 PHP 引擎在運(yùn)行時(shí)提供的錯(cuò)誤字符串。
closelog()
函數(shù)
該函數(shù)在向系統(tǒng)日志中發(fā)送完成定制消息以后調(diào)用,用來(lái)關(guān)閉由 openlog() 函數(shù)打開的日志連接。
那么接下來(lái)我們通過(guò)示例來(lái)看一下實(shí)際操作吧,示例如下:
<?php openlog("創(chuàng)新互聯(lián)", LOG_PID, LOG_USER); syslog(LOG_WARNING, "向 syslog 中發(fā)送定時(shí)消息,發(fā)送時(shí)間:".date("Y/m/d H:i:s")); closelog(); ?>
以windows系統(tǒng)為例,打開“此電腦”右鍵選擇“管理”選項(xiàng),進(jìn)入計(jì)算機(jī)管理界面,找到圖示中應(yīng)用程序的選項(xiàng),就能夠看到我們自己定制的警告信息了。如下所示:
其中我們需要注意的是:
你所使用的Web服務(wù)器環(huán)境決定了是使用指定文件還是使用syslog記錄錯(cuò)誤日志。如果你可以控制 Web 服務(wù)器,使用 syslog 是最理想的,因?yàn)槟隳芾?syslog 的解析工具來(lái)查看和分析日志。
但如果你的網(wǎng)站在共享服務(wù)器的虛擬主機(jī)中運(yùn)行,就只有使用單獨(dú)的文本文件記錄錯(cuò)誤日志了。
以上是“PHP錯(cuò)誤日志如何配置和使用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
本文名稱:PHP錯(cuò)誤日志如何配置和使用
本文URL:http://jinyejixie.com/article48/poshep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、Google、微信公眾號(hào)、自適應(yīng)網(wǎng)站、云服務(wù)器、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)