溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

記錄PHP錯(cuò)誤日志的方法

發(fā)布時(shí)間:2020-08-15 10:18:22 來(lái)源:億速云 閱讀:141 作者:小新 欄目:編程語(yǔ)言

這篇文章將為大家詳細(xì)講解有關(guān)記錄PHP錯(cuò)誤日志的方法,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

記錄PHP錯(cuò)誤日志的方法:首先設(shè)置PHP的配置文件;然后將使用指定的文件記錄錯(cuò)誤報(bào)告日志;最后錯(cuò)誤信息記錄到操作系統(tǒng)的日志里。

記錄PHP錯(cuò)誤日志的方法

記錄PHP錯(cuò)誤日志的方法:

1、使用指定的文件記錄錯(cuò)誤報(bào)告日志

如果使用自己指定的文件記錄錯(cuò)誤日志,一定要確保將這個(gè)文件存放在文檔根目錄之外,以減少遭到攻擊的可能。

并且該文件一定要讓PHP腳本的執(zhí)行用戶 (Web服務(wù)器進(jìn)程所有者)具有寫權(quán)限。假設(shè)在Linux操作系統(tǒng)中,將/usr/local/目錄下的error.log文件作為錯(cuò)誤日志文件,并設(shè)置 Web服務(wù)器進(jìn)程用戶具有寫的權(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 ;不顯示滿足上條 指令所定義規(guī)則的所有錯(cuò)誤報(bào)告

  • log_errors = On ;決定日志語(yǔ)句記錄的位置

  • log_errors_max_len = 1024 ;設(shè)置每個(gè)日志項(xiàng)的最大長(zhǎng)度

  • 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ò)誤日志/usr/local/error.log中。此外,不僅可以記錄滿足error_reporting所定義規(guī)則的所有錯(cuò)誤,而且 還可以使用PHP中的error_log()函數(shù),送出一個(gè)用戶自定義的錯(cuò)誤信息。

該函數(shù)的原型如下所示:

bool error_log ( string message [, int message_type [, string destination [, string extra_headers]] )

此 函數(shù)會(huì)送出錯(cuò)誤信息到Web服務(wù)器的錯(cuò)誤日志文件、某個(gè)TCP服務(wù)器或到指定文件中。該函數(shù)執(zhí)行成功則返回TRUE,失敗則返回FALSE。第一個(gè)參數(shù) message 是必選項(xiàng),即為要送出的錯(cuò)誤信息。如果僅使用這一個(gè)參數(shù),會(huì)按配置文件php.ini中所設(shè)置的位置處發(fā)送消息。第二個(gè)參數(shù)message_type為整 數(shù)值:0表示送到操作系統(tǒng)的日志中;1則使用PHP的Mail()函數(shù),發(fā)送信息到某E-mail處,第四個(gè)參數(shù)extra_headers亦會(huì)用到;2 則將錯(cuò)誤信息送到TCP 服務(wù)器中,此時(shí)第三個(gè)參數(shù)destination表示目的地IP及Port;3則將信息存到文件destination中。

如果以登入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("出現(xiàn)大麻煩了!", 1, ". mydomain.com"); //發(fā)送到管理員郵箱中 
 } 
error_log("搞砸了!", 2, "localhost:5000"); //發(fā)送到本機(jī)對(duì)應(yīng)5000端口的服務(wù)器中 
error_log("搞砸了!", 3, "/usr/local/errors.log"); //發(fā)送到指定的文件中 
?>

2、 錯(cuò)誤信息記錄到操作系統(tǒng)的日志里

錯(cuò)誤報(bào)告也可以被記錄到操作系統(tǒng)日志里,但不同的操作系統(tǒng)之間的日志管理有點(diǎn)區(qū)別。在Linux上錯(cuò)誤語(yǔ)句將送往syslog,而在Windows上錯(cuò)誤 將發(fā)送到事件日志里。如果你不熟悉syslog,起碼要知道它是基于UNIX的日志工具,它提供了一個(gè)API來(lái)記錄與系統(tǒng)和應(yīng)用程序執(zhí)行有關(guān)的消息。 Windows事件日志實(shí)際上與UNIX的syslog相同,這些日志通??梢酝ㄟ^(guò)事件查看器來(lái)查看。如果希望將錯(cuò)誤報(bào)告寫到操作系統(tǒng)的日志里,可以在配 置文件中將error_log指令的值設(shè)置為syslog。

具體需要在php.ini中修改的配置指令如下所示:

  • error_reporting = E_ALL ;將會(huì)向PHP報(bào)告發(fā)生的每個(gè)錯(cuò)誤

  • display_errors = Off ;不顯示 滿足上條指令所定義規(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)的日志里

除了一般的錯(cuò)誤輸出之外,PHP還允許向系統(tǒng)syslog中發(fā)送定制的消息。雖然通過(guò)前面介紹的error_log()函數(shù),也可以向syslog中發(fā)送定制的消息,但在PHP中為這個(gè)特性提供了需要一起使用的4個(gè)專用函數(shù)。

分別介紹如下:

define_syslog_variables()

在使用openlog()、syslog及closelog()三個(gè)函數(shù)之前必須先調(diào)用該函數(shù)。因?yàn)樵谡{(diào)用該函數(shù)時(shí),它會(huì)根據(jù)現(xiàn)在的系統(tǒng)環(huán)境為下面三個(gè)函數(shù)初使用化一些必需的常量。

openlog()

打開(kāi)一個(gè)和當(dāng)前系統(tǒng)中日志器的連接,為向系統(tǒng)插入日志消息做好準(zhǔn)備。并將提供的第一個(gè)字符串參數(shù)插入到每個(gè)日志消息中,該函數(shù)還需要指定兩個(gè)將在日志上下文使用的參數(shù),可以參考官方文檔使用。

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ò)誤字符串。

closelog()

該函數(shù)在向系統(tǒng)日志中發(fā)送完成定制消息以后調(diào)用,關(guān)閉由openlog()函數(shù)打開(kāi)的日志連接。

如果在配置文件中,已經(jīng)開(kāi)啟向syslog發(fā)送定制消息的指令,就可以使用前面介紹的四個(gè)函數(shù)發(fā)送一個(gè)警告消息到系統(tǒng)日志中,并通過(guò)系統(tǒng)中的syslog解析工具,查看和分析由PHP程序發(fā)送的定制消息,如下所示:

define_syslog_variables(); 
openlog("PHP5", LOG_PID , LOG_USER); 
 syslog(LOG_WARNING, "警告報(bào)告向syslog中發(fā)送的演示, 警告時(shí)間:".date("Y/m/d H:i:s")); 
 closelog(); 
 ?>

關(guān)于記錄PHP錯(cuò)誤日志的方法就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI