程序報錯老是在所不免,儘管咱們書寫代碼時已經格外當心。php
在開發php程序時,咱們但願遇到php報錯,能夠第一時間展現給咱們,以便於調試。當程序開發完成,成爲正式產品時,咱們但願將沒有預測到的報錯信息記錄到錯誤日誌中,而不是將這些報錯信息展現給用戶,由於用戶極有可能利用這些暴露出腳本路徑、數據庫信息或其餘的報錯信息進行一些破壞性的黑客行動。數據庫
php腳本在執行過程當中遇到錯誤將以報錯的形式處理,有些錯誤在報錯以後會終止腳本繼續執行,而有些不會,具體請參閱手冊。瀏覽器
php的報錯處理方式根據如下配置選項進行,這些配置能夠在代碼中聲明以設置,也能夠在php.ini文件中設置。若是不須要常常改動這些配置,仍是建議在php.ini文件中設置,以使你的代碼更清爽簡潔。函數
# 是否打印錯誤信息到瀏覽器/命令行界面 # 開發模式下建議開啓,產品模式下強烈建議關閉 ini_set('display_errors', 'On'); # 是否記錄錯誤信息到日誌 # 開發模式和產品模式下都建議開啓 ini_set('log_errors', 'On'); # 指定錯誤信息日誌文件,若開啓了 log_errors 選項,記得指定日誌文件位置 # 要確保執行 php 腳本的系統用戶擁有該文件的 write 權限,不然日誌沒法被寫入 ini_set('error_log', '/usr/local/php/errors.log'); # 該選項用以設定錯誤報告的等級 # 等同於 error_reporting(E_ALL) # 不管開發模式仍是產品模式下都建議開到E_ALL(報告全部的錯誤信息) # 產品模式下也須要設置此選項,由於關閉了 display_errors 並開啓了 log_errors # 因此瀏覽器/命令行界面不會所以暴露報錯信息 ini_set('error_reporting', E_ALL);
除此以外,php 還給開發者提供了在代碼中將自定義的錯誤信息記錄到錯誤日誌文件的內置函數:.net
bool error_log ( string $message [, int $message_type = 0 [, string $destination [, string $extra_headers ]]] )
必選參數是 message
,調用此函數會將 message
寫入 php.ini
中定義的 error_log
文件中。命令行
另外,用戶能夠經過函數:調試
mixed set_error_handler ( callable $error_handler [, int $error_types = E_ALL | E_STRICT ] )
以自定義的方式來處理腳本運行時出現的錯誤,若是用戶註冊了 error_handler
並指定了 error_types
,那麼當發生這些 error_types
的錯誤時,將繞過 php的標準錯誤處理程序
(也就是說既不會輸出錯誤信息,也不會記錄錯誤信息日誌),而是執行 error_handler
中的處理程序。該函數的詳細用法請參閱手冊,日誌