思維導圖:
1 什麼叫錯誤
書面一點的解釋:php指令碼自身原因,大部分是由於錯誤的語法,或者伺服器環境造成的php指令碼無法通過編譯,或者無法正常執行的情況。
注意:
1 並不是所有的錯誤都會造成指令碼無法執行,部分錯誤發生後指令碼繼續執行
2 正常情況下,錯誤並不能被try catch捕捉
2 錯誤的級別
1 Parse error 解析錯誤 (指令碼不能繼續執行)
解析錯誤舉例:
程式碼未以分號結尾
$num = 0 //執行結果:Parse error: syntax error, unexpected 'echo' (T_ECHO)
2 Fatal error 致命錯誤 (指令碼不能繼續執行)
致命錯誤舉例:
呼叫未定義的函式
test(); //執行結果:Fatal error: Uncaught Error: Call to undefined function test()
3 Warning 警告(給出錯誤資訊,指令碼繼續執行)
警告舉例:
除以0
1000 /0; 執行結果:Warning: Division by zero
4 Notice 注意 (給出錯誤資訊,指令碼繼續執行)
注意錯誤舉例:
輸出未定義的變數
echo $a; //執行結果:Notice: Undefined variable: a
5 deprecated:最低階別的錯誤 (指令碼繼續執行)
在php7以下版本會出現
3 必知必會函式
1 error_report 設定錯誤的報告級別
在工作中我們經常會用到這個函式來設定php的錯誤報錯,比如忽略notice報告:error_reporting(E_ALL ^ E_NOTICE);
可用版本:(PHP 4, PHP 5, PHP 7)
用法:error_reporting ([ int $level ] ) : int
level引數是錯誤的預定義常量
例項:
<?php
// 關閉所有PHP錯誤報告
error_reporting(0);
// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);
// 報告 E_NOTICE也挺好 (報告未初始化的變數
// 或者捕獲變數名的錯誤拼寫)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
// 除了 E_NOTICE,報告其他所有錯誤
error_reporting(E_ALL ^ E_NOTICE);
// 報告所有 PHP 錯誤 (參見 changelog)
error_reporting(E_ALL);
2 set_error_handler 設定使用者自定義的錯誤處理函式
這個函式可以按照你自己定義的方式來處理錯誤,在後面的專題還會詳細的講解,這裡先簡單講解一下
可用版本:(PHP 4 >= 4.0.1, PHP 5, PHP 7)
說明:set_error_handler ( callable $error_handler [, int $error_types = E_ALL | E_STRICT ] ) : mixed
引數解釋:
$error_handler : 我們自己自定義的函式
$error_types:錯誤的預定義常量, error_types 裡指定的錯誤型別都會繞過 PHP 標準錯誤處理程式, 除非回撥函式返回了 FALSE
例項:
<?php
set_error_handler('myErrorFun'); //把php原始的錯誤處理機制,變成我們的myErrorFun函式處理
function myErrorFun($errno, $message, $file, $line)
{
echo '錯誤碼是:'.$errno.'</br>';
echo '錯誤的資訊是'.$message.'</br>';
echo '錯誤的檔案是:'.$file.'</br>';
echo '錯誤的行數是'.$line;
}
echo $a; //a是未定義的變數
//列印結果:
錯誤碼是:8
錯誤的資訊是Undefined variable: a
錯誤的檔案是:D:\project\mz_php_server\public\test.php
錯誤的行數是12
4 錯誤的相關配置
錯誤的配置也是我們需要掌握的重要內容
配置檔案:php.ini檔案
相關配置:
1 錯誤日誌是否開啟
log_errors = On (Off)
2 錯誤日誌記錄的位置
error_log = php_errors.log
3 是否開啟錯誤顯示
display_errors = Off (Off)
4 定義錯誤顯示的級別
error_reporting = E_ALL (錯誤的預定義常量)
轉載自我的部落格:毛樂的個人部落格