當前位置:才華齋>計算機>php語言>

PHP學習入門之PHP錯誤處理

php語言 閱讀(2.67W)

PHP語言語法和C語言相似,有C語言基礎的學習起來難度應該不大。在除錯PHP程式碼時,你是否有過一臉悶逼的看著白屏而不知所措的經歷?學習一門新的語言,最重要的是要掌握它的錯誤處理,除錯的方法。PHP提供了一批錯誤處理函式,來幫助我們除錯,處理程式中出現的錯誤。

PHP學習入門之PHP錯誤處理

首先,要了解一下PHP中關於錯誤處理的配置指令

error_reporting

這個指令用來設定報錯等級。它的值可以是整數也可以是PHP內建的表示錯誤等級的常量,具體可以參考PHP手冊。

display_errors

是否要顯示錯誤資訊作為輸出的一部分輸出到螢幕。它的值可以是布林值,也可以是stderr,stdout.

display_startup_errors

這個指令主要是作除錯用途。因為即使display_errors指令設定為真,部分錯誤也不會顯示。它的值是布林值。

log_errors

這個指令決定將PHP的錯誤資訊是記錄到服務器日誌還是error_log指定的目標

現在我們來了解一下PHP提供的錯誤處理相關函式

我在除錯程式碼的時候喜歡在程式碼前面加上兩行:

error_reporting(E_ALL);

ini_set('display_errors',1);

ini_set('display_startup_errors', 1);

這兩行程式碼影響的就是PHP關於錯誤處理相關配置指令中的error_reporting和display_errors 這兩個配置指令。它將顯示所有的錯誤資訊到螢幕。但是有時候我們可能會發現這個不起作用啊,這是什麼情況?

  我總結一下,有這幾種情況:

第一,你碰到的可能是語法錯誤。由於PHP是解釋型語言,因為語法錯誤了,程式碼得不到執行(語法通不過,來不及執行),那麼執行時修改配置就達不到了,你通常會看到空白屏,這個時候,你可以通過命令列來檢查一下程式碼的語法。如:

php -l

當然,你也可以直接修改php的`配置檔案的display_erros指令和error_reporting指令,這樣你就可以看到錯誤資訊提示了。

第二,你如果是在一個框架或一個開源的系統,比如zend框架,或open cart開源商城系統。這兩行程式碼修改的配置指令,在框架程式碼中可能被重新修改配置過了。通常一個成熟的框架和開源系統出於安全或其它因素都會通過set_error_handler來修改PHP的預設錯誤處理機制。那麼,你最好使用他們的除錯排錯機制來除錯。

現在來認識一下重要的set_error_handler函式。它的作用是向PHP註冊使用者自定義的錯誤處理函式。需要注意的是,一旦註冊了自定義的錯誤處理函式,PHP的錯誤處理就會被跳過,error_reporting函式設定將沒有作用,而是由你的函式來處理錯誤,決定程式碼是否繼續執行,除非你的錯誤處理函式返回false。所以,有時候你會明明加了那幾行程式碼,但是沒看到任何錯誤提示。

restore_error_handler函式則是將錯誤處理交還給PHP。

另外兩個要特別提到的對除錯非常有幫助的函式是debug_backtrace和debug_print_backtrace。它們可以提供程式碼執行過程中涉及到的函式呼叫,包含檔案,哪個類,檔案第幾行,這些對除錯非常有用的資訊。

學習一門語言,要從學習如何處理,除錯錯誤的程式碼開始,掌握好錯誤處理,對除錯,對程式碼安全趙向陽是至關重要的。