站長資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        總結(jié)使用不同的方法記錄錯誤報告日志

        在之前的文章中給大家?guī)砹恕稁阋黄鹆私釶HP的錯誤類型和錯誤級別》,其中詳細(xì)介紹了PHP中的錯誤類型和錯誤級別,本篇文章我們一起來看一下PHP中錯誤日志的配置和使用方法。希望對大家有幫助!

        總結(jié)使用不同的方法記錄錯誤報告日志

        在我們之前的文章中,我們介紹了PHP錯誤的異常處理、錯誤類型還有錯誤級別,接下來我們來介紹一下PHP中錯誤日志的配置和使用方法。對于 PHP 開發(fā)者來說,一旦某個項目投入使用,應(yīng)該立即將配置文件 php.ini 中的 display_errors 選項關(guān)閉,以免因為這些錯誤而透露路徑、數(shù)據(jù)庫連接、數(shù)據(jù)表等信息。

        再投入使用的任何一個項目中,不可避免的會有錯誤的出現(xiàn),有些錯誤報告對開發(fā)者是有用的,這時候我們可以通過單獨的文本文件來進(jìn)行錯誤報告的日志記錄。這樣的話,開發(fā)人員可以更輕松的進(jìn)行查看系統(tǒng)是否存在問題。將PHP配置文件中的 log_errors 開啟的話,就可以將程序中的錯誤報告寫進(jìn)錯誤日志中了。

        其中這份錯誤報告會自動記錄到服務(wù)器的日志文件中,想要發(fā)送到系統(tǒng)的syslog中,也就是系統(tǒng)日志中,也是可以的。接下來我們就一起來看一下怎樣去實現(xiàn)這樣錯誤處理的方法吧。

        通過指定文件記錄錯誤報告

        想要實現(xiàn)使用目標(biāo)文件來記錄錯誤報告日志,其中重要的是需要讓這個制定的文件的位置在文檔根目錄外面,這樣的話受到攻擊的可能性較低,而且這個指定文件需要擁有一定的權(quán)限,首先我們先來看一下我們需要針對php.ini的配置指令做出怎樣的修改:

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

        • log_errors_max_len = 1024 ;設(shè)置每個日志項的最大長度

        • error_reporting = E_ALL ;將會向PHP報告發(fā)生的每個錯誤

        • display_errors = Off ;不顯示滿足上條 指令所定義規(guī)則的所有錯誤報告

        • error_log = /usr/local/error.log ;指定產(chǎn)生的 錯誤報告寫入的日志文件位置

        按照上述的方式修改php.ini文件后,成功設(shè)置之后,在運行PHP的腳本文件的時候,就不會在瀏覽器中有顯示錯誤報告了,這時候錯誤報告就都顯示在這個我們設(shè)置的目標(biāo)文件中,也就是錯誤日志中了。

        另外還需要注意的是,這個目標(biāo)文件中可以記錄error_reporting定義的錯誤也可以通過 error_log() 函數(shù)將錯誤信息放到服務(wù)器中的錯誤日志或者這個目標(biāo)文件中。

        error_log() 函數(shù)的語法格式如下:

        error_log ( string $message [, int $message_type = 0 [, string $destination [, string $extra_headers ]]] ) : bool

        其中需要注意的是:

        $message表示需要記錄的錯誤信息;$destination表示目標(biāo),也就是錯誤消息被發(fā)送到的目的地。它的含義描述于以上,由 $message_type 參數(shù)所決定;$extra_headers表示額外的頭。當(dāng) $message_type 設(shè)置為 1 的時候使用。 該信息類型使用了 mail() 的同一個內(nèi)置函數(shù)。

        $message_type表示設(shè)置錯誤應(yīng)該發(fā)送到何處。可能的信息類型有以下幾個:

        • 0:(默認(rèn)值)將 $message 發(fā)送到 PHP 的系統(tǒng)日志,使用操作系統(tǒng)的日志機(jī)制或者一個文件,取決于配置文件中 error_log 設(shè)置了什么;

        • 1:將 $message 發(fā)送到參數(shù) $destination 設(shè)置的郵件地址。 第四個參數(shù) $extra_headers 只有在這個類型里才會被用到;(2已經(jīng)被棄用了)

        • 3$message 被發(fā)送到位置為 $destination 的文件里。字符 $message 不會默認(rèn)被當(dāng)做新的一行;

        • 4:將 $message 直接發(fā)送到 SAPI 的日志處理程序中。

        接下來我們通過示例看一下以登入 Mysql 數(shù)據(jù)庫為例,當(dāng)?shù)侨胧r記錄錯誤信息。示例如下:

        <?php     $link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db");     if (!$link) {         error_log('Mysql 數(shù)據(jù)庫連接失敗!',0);         exit();     } ?>

        如果以登入Oracle數(shù)據(jù)庫出現(xiàn)問題的處理為例,該函數(shù)的使用示例如下:

        <?php if(!Ora_Logon($username, $password)){ error_log("Oracle數(shù)據(jù)庫不可用!", 0); //將錯誤消息寫入到操作系統(tǒng)日志中  } if(!($foo=allocate_new_foo()){  error_log("不行!", 1, ". mydomain.com"); //發(fā)送到管理員郵箱中  } error_log("不行!", 2, "localhost:5000"); //發(fā)送到本機(jī)對應(yīng)5000端口的服務(wù)器中 error_log("不行!", 3, "/usr/local/errors.log"); //發(fā)送到指定的文件中 ?>

        代碼運行之后就會在php.ini 配置文件中 error_log 一項所設(shè)置的目錄中生成對應(yīng)的錯誤日志文件。接下來我們看一下錯誤信息記錄到操作系統(tǒng)的日志里是什么情況。

        通過系統(tǒng)日志記錄錯誤報告

        上文中我們講到了將使用目標(biāo)文件來記錄錯誤報告日志,接下來我們就來看一下將錯誤信息放到操作系統(tǒng)的日志里面,這是可以實現(xiàn)的,其中不同的操作系統(tǒng),它們的日志管理也是不一樣的,下面我們都是使用常見的windows舉例,Windows 上錯誤將發(fā)送到事件日志里,可以通過事件查看器來查看。

        通過什么樣的方法才能夠在操作系統(tǒng)的日志里有錯誤信息呢?這時候我們可以通過php.ini 配置文件中 error_log,接下來我們看一下應(yīng)該怎樣修改php.ini中的配置文件。

        修改error_reporting = E_ALL用來報告所發(fā)生的每個錯誤;修改display_errors = Off 用來不顯示滿足上條指令所定義規(guī)則的所有錯誤報告;修改log_errors = On用于決定日志語句記錄的位置;修改log_errors_max_len = 1024用于設(shè)置每個日志項的最大長度;修改error_log = syslog用于指定產(chǎn)生的錯誤報告寫入操作系統(tǒng)的日志里 。

        雖然通過前面介紹的 error_log() 函數(shù),可以向 syslog 中發(fā)送定制的消息,想要實現(xiàn)將錯誤信息放到操作系統(tǒng)的日志里面,我們還需要三個函數(shù)的幫助,下面我們就來簡單的介紹一下:

        • openlog()函數(shù)

        該函數(shù)是用來打開連接的,用于向系統(tǒng)中寫入日志信息做的準(zhǔn)備。并且每個日志的消息中都有它的一個參數(shù)是字符串形式的。

        • syslog()函數(shù)

        該函數(shù)擁有兩個參數(shù),它的作用是用來給系統(tǒng)中的日志給一個特定消息,第一個參數(shù)就是用來設(shè)置這個消息的優(yōu)先級,第二個參數(shù)即使提供字符串,這個字符串就是這個特定的消息。

        • closelog()函數(shù)

        該函數(shù)就是用來關(guān)閉連接的,這個連接就是上文中openlog() 函數(shù)打開的。

        那么接下來我們通過示例來看一下實際操作吧,示例如下:

        <?php     openlog("PHP中文網(wǎng)", LOG_PID, LOG_USER);     syslog(LOG_WARNING, "向 syslog 中發(fā)送定時消息,發(fā)送時間:".date("Y/m/d H:i:s"));     closelog(); ?>

        以windows系統(tǒng)為例,打開“此電腦”右鍵選擇“管理”選項,進(jìn)入計算機(jī)管理界面,找到圖示中應(yīng)用程序的選項,就能夠看到我們自己定制的警告信息了。如下所示:

        總結(jié)使用不同的方法記錄錯誤報告日志

        總結(jié)使用不同的方法記錄錯誤報告日志

        其中我們需要注意的是:

        你所使用的Web服務(wù)器環(huán)境決定了是使用指定文件還是使用syslog記錄錯誤日志。可以控制服務(wù)器的話就可以利用解析工具來查看和分析日志,推薦使用syslog 激勵錯誤日志,網(wǎng)站在共享服務(wù)器的虛擬主機(jī)中運行,推薦使用單獨的文本文件記錄錯誤日志了。

        大家如果感興趣的話,可以點擊《PHP視頻教程》進(jìn)行

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
        主站蜘蛛池模板: 国模和精品嫩模私拍视频| 亚洲精品国产福利一二区| 天天爽夜夜爽夜夜爽精品视频| 99精品视频免费| 日韩精品久久久久久久电影蜜臀| 国产欧美一区二区精品性色99| 国产精品嫩草影院一二三区入口| 亚洲精品高清无码视频| 日韩精品无码人妻一区二区三区| 91麻豆精品一二三区在线 | 无码8090精品久久一区| 91精品久久久久久无码| 99re热这里只有精品视频中文字幕| 久久精品亚洲日本波多野结衣 | 亚洲国产精品国自产拍AV| 亚洲国模精品一区| 欧美日韩精品在线观看| 免费人欧美日韩在线精品| 久久久精品国产Sm最大网站| 国产精品v欧美精品v日本精| 四虎国产精品免费久久5151| 欧美精品免费线视频观看视频 | 97精品国产一区二区三区| 久久久久女人精品毛片| 日韩人妻精品无码一区二区三区| 中文字幕久久精品| 亚洲日韩一页精品发布| 亚洲国产另类久久久精品黑人 | 女人香蕉久久**毛片精品| 性色精品视频网站在线观看| 久久精品这里热有精品| 亚洲国产成人久久精品影视| 亚洲综合国产精品| 国产精品无码免费专区午夜| 国精品产露脸自拍| 亚洲国产精品成人久久蜜臀 | 日韩精品一区二区三区大桥未久| 青青青国产精品国产精品久久久久| 久久成人精品视频| 青青草精品视频| 国产精品美女久久久网AV|