對於php開發者來說,一旦某個產品投入使用,應該立即將 display_errors選項關閉,以免因為這些錯誤所透露的路徑、資料庫連線、資料表等資訊而遭到黑客攻擊。但是,任何乙個產品在投入使用後,都難 免會有錯誤出現,那麼如何記錄一些對開發者有用的錯誤報告呢?我們可以在單獨的文字檔案中將錯誤報告作為日誌記錄。錯誤日誌的記錄,可以幫助開發人員或者 管理人員檢視系統是否存在問題。 如果需要將程式中的錯誤報告寫入錯誤日誌中,只要在php的配置檔案中,將配置指令log_errors開啟即可。錯誤 報告預設就會記錄到web伺服器的日誌檔案裡,例如記錄到apache伺服器的錯誤日誌檔案error.log中。當然也可以記錄錯誤日誌到指定的檔案中 或傳送給系統syslog,分別介紹如下:
1、使用指定的檔案記錄錯誤報告日誌
使 用指定的檔案記錄錯誤報告日誌使用指定的檔案記錄錯誤報告日誌使用指定的檔案記錄錯誤報告日誌 如果使用自己指定的檔案記錄錯誤日誌,一定要確保將這個文 件存放在文件根目錄之外,以減少遭到攻擊的可能。並且該檔案一定要讓php指令碼的執行使用者(web伺服器程序所有者)具有寫許可權。假設在linux操作系 統中,將/usr/local/目錄下的error.log檔案作為錯誤日誌檔案,並設定web伺服器程序使用者具有寫的許可權。然後在php的配置檔案中, 將error_log指令的值設定為這個錯誤日誌檔案的絕對路徑。
需要將php.ini中的配置指令做如下修改:
error_reporting = e_all ;將會向php報告發生的每個錯誤
display_errors = off ;不顯示滿足上條 指令所定義規則的所有錯誤報告
log_errors = on ;決定日誌語句記錄的位置
log_errors_max_len = 1024 ;設定每個日誌項的最大長度
error_log = /usr/local/error.log ;指定產生的 錯誤報告寫入的日誌檔案位置
php 的配置檔案按上面的方式設定完成以後,並重新啟動web伺服器。這樣,在執行php的任何指令碼檔案時,所產生的所有錯誤報告都不會在瀏覽器中顯示,而會記 錄在自己指定的錯誤日誌/usr/local/error.log中。此外,不僅可以記錄滿足error_reporting所定義規則的所有錯誤,而且 還可以使用php中的error_log()函式,送出乙個使用者自定義的錯誤資訊。
該函式的原型如下所示:
bool error_log ( string message [, int message_type [, string destination [, string extra_headers]]] )
此 函式會送出錯誤資訊到web伺服器的錯誤日誌檔案、某個tcp伺服器或到指定檔案中。該函式執行成功則返回true,失敗則返回false。第乙個引數 message 是必選項,即為要送出的錯誤資訊。如果僅使用這乙個引數,會按配置檔案php.ini中所設定的位置處傳送訊息。第二個引數 message_type為整數值:0表示送到作業系統的日誌中;1則使用php的mail()函式,傳送資訊到某e-mail處,第四個引數 extra_headers亦會用到;2則將錯誤資訊送到tcp 伺服器中,此時第三個引數destination表示目的地ip及port;3則將資訊 存到檔案destination中。
如果以登入oracle資料庫出現問題的處理為例,該函式的使用如下所示:
if(!ora_logon(us
erna
me, password)){
error_log(「oracle資料庫不可用!」, 0); //將錯誤訊息寫入到作業系統日誌中
if(!($foo=allocate_new_foo()){
error_log(「出現**煩了!」, 1, 「. mydomain.com」); //傳送到管理員郵箱中
error_log(「搞砸了!」, 2, 「localhost:5000」); //傳送到本機對應5000埠的伺服器中
error_log(「搞砸了!」, 3, 「/usr/local/errors.log」); //傳送到指定的檔案中
2、 錯誤資訊記錄到作業系統的日誌裡
錯 誤資訊記錄到作業系統的日誌裡錯誤資訊記錄到作業系統的日誌裡錯誤資訊記錄到作業系統的日誌裡 錯誤報告也可以被記錄到作業系統日誌裡,但不同的作業系統 之間的日誌管理有點區別。在linux上錯誤語句將送往syslog,而在windows上錯誤將傳送到事件日誌裡。如果你不熟悉syslog,起碼要知 道它是基於unix的日誌工具,它提供了乙個api來記錄與系統和應用程式執行有關的訊息。windows事件日誌實際上與unix的syslog相同, 這些日誌通常可以通過事件檢視器來檢視。如果希望將錯誤報告寫到作業系統的日誌裡,可以在配置檔案中將error_log指令的值設定為syslog。
具體需要在php.ini中修改的配置指令如下所示:
1、error_reporting = e_all ;將會向php報告發生的每個錯誤
2、display_errors = off ;不顯示 滿足上條指令所定義規則的所有錯誤報告
3、log_errors = on ;決定日誌語句記錄的位置
4、log_errors_max_len = 1024 ;設定每個日誌項的最大長度
5、error_log = syslog ;指定產生的錯誤報告寫入作業系統的日誌裡
除了一般的錯誤輸出之外,php還允許向系統syslog中傳送定製的訊息。雖然通過前面介紹的error_log()函式,也可以向syslog中傳送定製的訊息,但在php中為這個特性提供了需要一起使用的4個專用函式。
分別介紹如下:
define_syslog_variables()
在使用openlog()、syslog及closelog()三個函式之前必須先呼叫該函式。因為在呼叫該函式時,它會根據現在的系統環境為下面三個函式初使用化一些必需的常量。
openlog()
開啟乙個和當前系統中日誌器的連線,為向系統插入日誌訊息做好準備。並將提供的第乙個字串引數插入到每個日誌訊息中,該函式還需要指定兩個將在日誌上下文使用的引數,可以參考官方文件使用。
syslog()
該 函式向系統日誌中傳送乙個定製訊息。需要兩個必選引數,第乙個引數通過指定乙個常量定製訊息的優先順序。例如log_warning表示一般的警 告,log_emerg表示嚴重地可以預示著系統崩潰的問題,一些其他的表示嚴重程度的常量可以參考官方文件使用。第二個引數則是向系統日誌中傳送的定製 訊息,需要提供乙個訊息字串,也可以是php引擎在執行時提供的錯誤字串。
closelog()
該函式在向系統日誌中傳送完成定製訊息以後呼叫,關閉由openlog()函式開啟的日誌連線。
如果在配置檔案中,已經開啟向syslog傳送定製訊息的指令,就可以使用前面介紹的四個函式傳送乙個警告訊息到系統日誌中,並通過系統中的syslog解析工具,檢視和分析由php程式傳送的定製訊息,如下所示:
define_syslog_variables();
openlog(「php5」, log_pid , log_user);
closelog();
以windows系統為例,通過右擊」我的電腦」選擇管理選項,然後到系統工具選單中,選擇事件檢視器,再找到應用程式選項,就可以看到我們自己定製的警告訊息了。上面這段**將在系統的syslog檔案中,生成類似下面的一條資訊,是事件的一部分:
使 用指定的檔案還是使用syslog記錄錯誤日誌,取決於你所在的web伺服器環境。如果你可以控制web伺服器,使用syslog是最理想的,因為你能利 用syslog的解析工具來檢視和分析日誌。但如果你的**在共享伺服器的虛擬主機中執行,就只有使用單獨的文字檔案記錄錯誤日誌了。
php錯誤日誌
對於php開發者來說,一旦某個產品投入使用,應該立即將display errors選項關閉,以免因為這些錯誤所透露的路徑 資料庫連線 資料表等資訊而遭到黑客攻擊。但是,任何乙個產品在投入使用後,都難免會有錯誤出現,那麼如何記錄一些對開發者有用的錯誤報告呢?我們可以在單獨的文字檔案中將錯誤報告作為日誌...
php錯誤日誌
display errors 是否顯示錯誤 off遮蔽所有錯誤,on顯示錯誤,錯誤級別要 error reporting 定義,即輸出那些錯誤內容要error reporting定義。開發時可設定為 display errors on,正式環境最好關掉 display errors off,因為顯示...
PHP錯誤日誌
1 使用指定的檔案記錄錯誤報告日誌 使 用指定的檔案記錄錯誤報告日誌使用指定的檔案記錄錯誤報告日誌使用指定的檔案記錄錯誤報告日誌 如果使用自己指定的檔案記錄錯誤日誌,一定要確保將這個文 件存放在文件根目錄之外,以減少遭到攻擊的可能。並且該檔案一定要讓php指令碼的執行使用者 web伺服器程序所有者 ...