中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP錯誤日志如何配置和使用

發布時間:2021-11-01 17:35:49 來源:億速云 閱讀:105 作者:小新 欄目:編程語言

小編給大家分享一下PHP錯誤日志如何配置和使用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

對于 PHP 開發者來說,一旦某個項目投入使用,應該立即將配置文件 php.ini 中的 display_errors 選項關閉,以免因為這些錯誤所透露的路徑、數據庫連接、數據表等信息而遭到黑客攻擊。

但是任何一個項目在投入使用后,都難免會有錯誤出現,那么如何記錄一些對開發者有用的錯誤報告呢?這時候我們可以在單獨的文本文件中將錯誤報告作為日志記錄。錯誤日志的記錄,可以幫助開發人員或者管理人員查看系統是否存在問題。

如果需要將程序中的錯誤報告寫入錯誤日志中,只要在 PHP 的配置文件中,將配置項 log_errors 開啟即可。

錯誤報告默認會記錄到 Web 服務器的日志文件里,例如記錄到 Apache 服務器的錯誤日志文件 error.log 中。當然也可以將錯誤日志記錄到指定的文件中或發送到系統的 syslog也就是系統日志中,那接下來我們就分別來看一下吧。

使用指定文件記錄錯誤報告日志

如果想使用自己指定的文件記錄錯誤日志,一定要確保這個文件存放在文檔根目錄之外,以減少遭到攻擊的可能。并且該文件一定要讓 PHP 腳本具有寫權限。首先我們需要將 php.ini 中的配置指令做如下修改:

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

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

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

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

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

PHP 的配置文件按上面的方式設置完成以后,并重新啟動 Web 服務器。這樣,在執行 PHP 的任何腳本文件時,產生的所有錯誤報告都不會在瀏覽器中顯示,而會記錄在自己指定的錯誤日志中。

此外,不僅可以記錄滿足 error_reporting 所定義規則的所有錯誤,而且還可以使用 PHP 中的 error_log() 函數把錯誤信息發送到 web 服務器的錯誤日志或者到一個文件里。

error_log() 函數的原型如下所示:

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

其中需要注意的是:

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

$message_type表示設置錯誤應該發送到何處。可能的信息類型有以下幾個:

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

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

  • 3$message 被發送到位置為 $destination 的文件里。字符 $message 不會默認被當做新的一行;

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

接下來我們通過示例看一下以登入 Mysql 數據庫為例,當登入失敗時記錄錯誤信息。示例如下:

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

如果以登入Oracle數據庫出現問題的處理為例,該函數的使用示例如下:

<?php
if(!Ora_Logon($username, $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"); //發送到指定的文件中
?>

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

錯誤信息記錄到操作系統的日志里

錯誤報告也可以被記錄到操作系統日志里,但不同的操作系統之間的日志管理也是不同的。以我們常見的windows舉例,Windows 上錯誤將發送到事件日志里,可以通過事件查看器來查看。

那怎樣才能將錯誤信息記錄到操作系統的日志里呢?如果希望將錯誤報告寫到操作系統的日志里,將 php.ini 配置文件中 error_log 項的值設置為 syslog 即可。接下來我們看一下php.ini需要修改的指令有哪些:

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

雖然通過前面介紹的 error_log() 函數,也可以向 syslog 中發送定制的消息,但在 PHP 中為這個特性提供了需要一起使用的 3 個專用函數,如下所示:

  • openlog()函數

打開一個當前系統中日志器的連接,為向系統插入日志消息做好準備。并將提供的第一個字符串參數插入到每個日志消息中。

  • syslog()函數

該函數向系統日志中發送一個定制消息。需要兩個必選參數,第一個參數通過指定一個常量定制消息的優先級。第二個參數則是向系統日志中發送的定制消息,需要提供一個消息字符串,也可以是 PHP 引擎在運行時提供的錯誤字符串。

  • closelog()函數

該函數在向系統日志中發送完成定制消息以后調用,用來關閉由 openlog() 函數打開的日志連接。

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

<?php
    openlog("億速云", LOG_PID, LOG_USER);
    syslog(LOG_WARNING, "向 syslog 中發送定時消息,發送時間:".date("Y/m/d H:i:s"));
    closelog();
?>

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

PHP錯誤日志如何配置和使用

PHP錯誤日志如何配置和使用

其中我們需要注意的是:

你所使用的Web服務器環境決定了是使用指定文件還是使用syslog記錄錯誤日志。如果你可以控制 Web 服務器,使用 syslog 是最理想的,因為你能利用 syslog 的解析工具來查看和分析日志。

但如果你的網站在共享服務器的虛擬主機中運行,就只有使用單獨的文本文件記錄錯誤日志了。

以上是“PHP錯誤日志如何配置和使用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

兴仁县| 洛浦县| 徐汇区| 东阳市| 江西省| 浠水县| 白玉县| 吉林市| 彰化市| 云浮市| 凤台县| 宜良县| 方正县| 南召县| 宜川县| 公安县| 美姑县| 高清| 大丰市| 同心县| 汶上县| 元阳县| 玉龙| 定远县| 安泽县| 宜君县| 宜章县| 疏附县| 上杭县| 宁远县| 南通市| 道真| 方正县| 吴川市| 雅江县| 海伦市| 临邑县| 宜阳县| 铜川市| 探索| 松原市|