異常與錯誤
以上是php中錯誤和異常的乙個概念,php中任何自身的錯誤或者是非正常的**都會當做錯誤對待,並不會以異常的形式丟擲,但是也有一些情況會當做異常和錯誤同時丟擲。也就是說,你想在資料庫連線失敗的時候自動捕獲異常是行不通的,因為這就不是異常,是錯誤。
要做錯誤處理,必須得明細錯誤級別:
fatal error:致命錯誤(指令碼終止執行)
e_error // 致命的執行錯誤,錯誤無法恢復,暫停執行指令碼
e_core_error // php啟動時初始化過程中的致命錯誤
e_compile_error // 編譯時致命性錯,就像由zend指令碼引擎生成了乙個e_error
e_user_error // 自定義錯誤訊息。像用php函式trigger_error(錯誤型別設定為:e_user_error)
parse error:編譯時解析錯誤,語法錯誤(指令碼終止執行)
e_parse //編譯時的語法解析錯誤
warning error:警告錯誤(僅給出提示資訊,指令碼不終止執行)
e_warning // 執行時警告 (非致命錯誤)。
e_core_warning // php初始化啟動過程中發生的警告 (非致命錯誤) 。
e_compile_warning // 編譯警告
e_user_warning // 使用者產生的警告資訊
notice error:通知錯誤(僅給出通知資訊,指令碼不終止執行)
e_notice // 執行時通知。表示指令碼遇到可能會表現為錯誤的情況.
e_user_notice // 使用者產生的通知資訊。
由此可知有5類是產生error級別的錯誤,這種錯誤直接導致php程式退出。
php**在執行的過程中,一旦出現錯誤,就會觸發系統的錯誤處理機制。如果我們配置了錯誤報告就回直接報告出錯誤。如圖所示:
像這樣的處理如果我們的**在生產上執行,就會暴露很多資訊(比如伺服器的系統),所以我們會做簡單的配置:
第一種: 修改php.ini 配置檔案:
error_reporting = e_all //將向php傳送每個錯誤
display_errors = off //不顯示錯誤報告
log_errors = on //開啟錯誤日誌記錄
log_errors_max_log = 1024 //每條日誌的最大長度
error_log = g:/myerror.log //指定錯誤日誌檔案
注意:由於我們關閉了錯誤報告,但是錯誤是存在的,為了排查錯誤,我們開啟了錯誤日誌.
第二種: 不修改配置檔案,在**層處理
error_reporting(e_all); //將向php傳送每個錯誤
ini_set('display_errors',0); //不顯示錯誤報告
ini_set('log_errors',1); //開啟錯誤日誌記錄
ini_set('error_log','./error.log'); //指定錯誤日誌檔案
test();
執行以上**,就會發現 當前目錄下出現 error.log 的檔案,內容如下:
[05-jul-2018 03:37:38 utc] php fatal error: uncaught error: call to undefined function test() in d:\phpstudy\www\test.php:6
stack trace:
#0 thrown in d:\phpstudy\www\test.php on line 6
function checknum($number)
如上**所示: 在呼叫 checknum()函式的時候 如果在呼叫的時候 引數傳遞為0,就會出現異常,這個時候我們就會用到 異常處理操作:
function checknum($number)
return 100/$number;
}
然後在呼叫的時候:
<?php
try //捕獲異常
catch (exception $e)
再比如如下的異常處理:
<?php
$pdo = new pdo('mysql://host=wrong_host;dbname=wrong_name');
$count = $pdo->exec("delete from fruit where colour = 'red'");
try catch (pdoexception $e)
exception是所有異常的基類。他提供了一下方法給我們用來處理異常:
exception::getmessage — 獲取異常訊息內容
exception::getprevious — 返回異常鏈中的前乙個異常
exception::getcode — 獲取異常**
exception::getfile — 建立異常時的程式檔名稱
exception::getline — 獲取建立的異常所在檔案中的行號
exception::gettrace — 獲取異常追蹤資訊
exception::gettraceasstring — 獲取字串型別的異常追蹤資訊
exception::__tostring — 將異常物件轉換為字串
exception::__clone — 異常轉殖
php 錯誤與異常處理(一) PHP錯誤與異常處理
和其他程式語言遇到錯誤就丟擲異常不一樣,php在處理物件時它也有異常機制,但是php會盡可能的愉快的去執行而無視發生的事情,除非遇到乙個極端嚴重錯誤才會丟擲異常。本文概述php相關的錯誤異常處理機制。錯誤等級 php 有幾個錯誤嚴重性等級。三個最常見的的資訊型別是錯誤 error 通知 notice...
php 的錯誤與異常處理(一)錯誤處理
前言 好的 不僅僅要 設計優美,結構清晰。更要有完善的錯誤處理機制,特別是針對異常的處理,只有這樣才能在系統出現問題的時候,準確排查錯誤。記住,錯誤和異常不是一回事,錯誤是開發階段的一些失誤,引起的程式問題,您只要解決掉錯誤才能推進程式的開發。異常,則是專案在執行的過程中遇到的一些意外,導致程式執行...
php 不丟擲異常 php錯誤與異常處理
php與其他計算機程式語言在遇到錯誤就丟擲異常不太一樣,php在處理物件時它也有異常機制,但是php會盡可能的愉快的去執行而無視發生的事情,除非遇到乙個極端嚴重錯誤才會丟擲異常。本文主要給大家分享php相關的錯誤異常處理機制。錯誤等級 php 有幾個錯誤嚴重性等級。三個最常見的的資訊型別是錯誤 er...