- 相關(guān)推薦
PHP學(xué)習(xí)入門之PHP錯誤處理
PHP語言語法和C語言相似,有C語言基礎(chǔ)的學(xué)習(xí)起來難度應(yīng)該不大。在調(diào)試PHP代碼時,你是否有過一臉悶逼的看著白屏而不知所措的經(jīng)歷?學(xué)習(xí)一門新的語言,最重要的是要掌握它的錯誤處理,調(diào)試的方法。PHP提供了一批錯誤處理函數(shù),來幫助我們調(diào)試,處理程序中出現(xiàn)的錯誤。
首先,要了解一下PHP中關(guān)于錯誤處理的配置指令
error_reporting
這個指令用來設(shè)置報錯等級。它的值可以是整數(shù)也可以是PHP內(nèi)置的表示錯誤等級的常量,具體可以參考PHP手冊。
display_errors
是否要顯示錯誤信息作為輸出的一部分輸出到屏幕。它的值可以是布爾值,也可以是stderr,stdout.
display_startup_errors
這個指令主要是作調(diào)試用途。因為即使display_errors指令設(shè)置為真,部分錯誤也不會顯示。它的值是布爾值。
log_errors
這個指令決定將PHP的錯誤信息是記錄到服務(wù)器日志還是error_log指定的目標(biāo)。
現(xiàn)在我們來了解一下PHP提供的錯誤處理相關(guān)函數(shù)
我在調(diào)試代碼的時候喜歡在代碼前面加上兩行:
error_reporting(E_ALL);
ini_set('display_errors',1);
ini_set('display_startup_errors', 1);
這兩行代碼影響的就是PHP關(guān)于錯誤處理相關(guān)配置指令中的error_reporting和display_errors 這兩個配置指令。它將顯示所有的錯誤信息到屏幕。但是有時候我們可能會發(fā)現(xiàn)這個不起作用啊,這是什么情況?
我總結(jié)一下,有這幾種情況:
第一,你碰到的可能是語法錯誤。由于PHP是解釋型語言,因為語法錯誤了,代碼得不到執(zhí)行(語法通不過,來不及執(zhí)行),那么運(yùn)行時修改配置就達(dá)不到了,你通常會看到空白屏,這個時候,你可以通過命令行來檢查一下代碼的語法。如:
php -l phpfilename.php
當(dāng)然,你也可以直接修改php的配置文件的display_erros指令和error_reporting指令,這樣你就可以看到錯誤信息提示了。
第二,你如果是在一個框架或一個開源的系統(tǒng),比如zend框架,或open cart開源商城系統(tǒng)。這兩行代碼修改的配置指令,在框架代碼中可能被重新修改配置過了。通常一個成熟的框架和開源系統(tǒng)出于安全或其它因素都會通過set_error_handler來修改PHP的默認(rèn)錯誤處理機(jī)制。那么,你最好使用他們的調(diào)試排錯機(jī)制來調(diào)試。
現(xiàn)在來認(rèn)識一下重要的set_error_handler函數(shù)。它的作用是向PHP注冊用戶自定義的錯誤處理函數(shù)。需要注意的是,一旦注冊了自定義的錯誤處理函數(shù),PHP的錯誤處理就會被跳過,error_reporting函數(shù)設(shè)置將沒有作用,而是由你的函數(shù)來處理錯誤,決定代碼是否繼續(xù)執(zhí)行,除非你的錯誤處理函數(shù)返回false。所以,有時候你會明明加了那幾行代碼,但是沒看到任何錯誤提示。
restore_error_handler函數(shù)則是將錯誤處理交還給PHP。
另外兩個要特別提到的對調(diào)試非常有幫助的函數(shù)是debug_backtrace和debug_print_backtrace。它們可以提供代碼執(zhí)行過程中涉及到的函數(shù)調(diào)用,包含文件,哪個類,文件第幾行,這些對調(diào)試非常有用的信息。
學(xué)習(xí)一門語言,要從學(xué)習(xí)如何處理,調(diào)試錯誤的代碼開始,掌握好錯誤處理,對調(diào)試,對代碼安全趙向陽是至關(guān)重要的。
【PHP學(xué)習(xí)入門之PHP錯誤處理】相關(guān)文章:
php學(xué)習(xí)之php配置07-15
php學(xué)習(xí)入門方法05-23
php學(xué)習(xí)之php預(yù)定義變量07-29
PHP入門學(xué)習(xí)方法06-26
PHP基礎(chǔ)入門06-02
php關(guān)于PHP上傳入門學(xué)習(xí)知識點07-20
php基礎(chǔ)入門知識04-07
php語言基礎(chǔ)入門02-06