首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 錯誤處理完整指南:從基礎到進階實踐

     編輯:PHP 綜合知識

在 PHP 開發中,錯誤處理是構建健壯應用程式的關鍵環節。缺乏完善的錯誤處理機制,程式在遇到異常情況時可能會意外終止,甚至暴露敏感資訊給使用者,造成安全風險。本文將系統介紹 PHP 的錯誤處理機制,從基礎的 die() 到自訂錯誤處理器、錯誤觸發器,再到錯誤日誌記錄,幫助開發者掌握完整的錯誤處理體系。

為什麼需要錯誤處理?

試想一個讀取檔案的程式,若檔案不存在且未做任何判斷,PHP 會拋出警告並繼續執行後續程式碼,導致邏輯錯誤。健壯的寫法應預先檢查條件:

<?php
if (!file_exists("aa.txt")) {
    echo "檔案不存在";
    exit();
} else {
    $fp = fopen("aa.txt", "r");
    echo "檔案開啟成功";
    fclose($fp);
}
?>

一、簡單的 die() 語句

die() 相當於 exit(),常用於條件不滿足時終止腳本並輸出訊息。利用邏輯運算子的短路特性,可寫出更簡潔的程式碼:

<?php
file_exists("aa.txt") or die("檔案不存在"); // 若為真繼續執行,否則執行 die()
$fp = fopen("aa.txt", "r");
echo "檔案開啟成功";
fclose($fp);
?>

二、自訂錯誤處理器與錯誤觸發器

1. 自訂錯誤處理函數

透過 set_error_handler() 註冊自訂函數,可攔截特定級別的錯誤。處理函數至少需接受兩個參數(錯誤級別、錯誤訊息),最多可接受五個參數(含檔案、行號、錯誤上下文):

error_function(error_level, error_message, error_file, error_line, error_context);

2. PHP 錯誤級別

PHP 錯誤級別對照表

3. 實作範例:攔截 E_WARNING 級別錯誤

<?php
function my_error($errno, $errmes) {
    echo "<font size='5' color='red'>$errno</font><br />";
    echo "錯誤訊息是:$errmes";
    exit();
}
set_error_handler("my_error", E_WARNING); // 指定 WARNING 級別調用自訂函數
$fp = fopen("bb.txt", "r"); // 檔案不存在時會觸發 E_WARNING
?>

4. 錯誤觸發器 trigger_error():處理邏輯錯誤

當業務邏輯出現異常(如年齡超過合理範圍)時,可主動觸發使用者定義錯誤:

<?php
function my_error3($errno, $errmes) {
    echo "錯誤號是:" . $errno;
}
set_error_handler("my_error3", E_USER_WARNING);
$age = 300;
if ($age > 120) {
    trigger_error("輸入的年齡過大", E_USER_WARNING); // 觸發自訂錯誤
}
echo "OK";
?>

三、PHP 錯誤日誌記錄

生產環境應關閉錯誤顯示,改為記錄日誌。透過 error_log() 可將錯誤資訊寫入指定檔案:

bool error_log(string $message [, int $message_type = 0 [, string $destination [, string $extra_headers]]])

實作範例:記錄錯誤號、訊息與發生時間

<?php
function my_error3($errno, $errmes) {
    $err_info = "錯誤號是:" . $errno . "--" . $errmes;
    date_default_timezone_set("PRC"); // 設定中國時區
    error_log("時間是" . date("Y-m-d G-i-s") . $err_info . "\r\n", 3, "myerr.txt");
}
set_error_handler("my_error3", E_USER_WARNING);
$age = 300;
if ($age > 120) {
    trigger_error("輸入的年齡過大", E_USER_WARNING);
}
echo "OK";
?>

時間處理補充

<?php
echo time() . "<br />";
date_default_timezone_set("PRC"); // 設定為中國時區
echo date("Y-m-d G-i-s");
?>

透過完善的錯誤處理機制,不僅能提升程式穩定性,更能在問題發生時快速定位根因,是 PHP 開發者必備的核心技能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved