PHP 錯誤與異常處理 一

2021-09-19 21:43:33 字數 3032 閱讀 5405

異常與錯誤

以上是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...