PHP 除錯與錯誤處理技巧 (Debugging)
在開發 PHP 程式時,難免會遇到 Bug。掌握有效的除錯工具與技巧,能幫你節省大量的時間。
基礎除錯函數
最直接的方法就是把變數的內容印出來看。
var_dump()
顯示變數的型別與內容,是最常用的除錯工具。
<?php
$user = [
'id' => 1,
'name' => 'Alice',
'active' => true
];
var_dump($user);
// 輸出:
// array(3) {
// ["id"]=> int(1)
// ["name"]=> string(5) "Alice"
// ["active"]=> bool(true)
// }
?>
print_r()
以較易讀的人類格式顯示變數內容(主要用於陣列與物件),不會顯示型別。
<?php
print_r($user);
// 輸出:
// Array ( [id] => 1 [name] => Alice [active] => 1 )
?>
設定錯誤顯示
在開發環境中,你應該讓 PHP 顯示所有錯誤,以便即時修正。
在程式碼中設定
<?php
// 回報所有錯誤
error_reporting(E_ALL);
// 將錯誤顯示在網頁上
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
// 開放測試時故意寫錯
echo $undefinedVariable;
?>
重要安全性提醒:在正式環境 (Production) 中,絕對不能將
display_errors 設為 1,這會洩漏你的程式路徑與敏感資訊。使用 Error Log (錯誤日誌)
如果你不想把錯誤印在畫面上,或是想追蹤背景執行的程式,可以使用 Log。
error_log()
<?php
// 寫入系統預設的 PHP Error Log
error_log("這是一條自訂錯誤訊息");
// 寫入特定檔案
error_log("發生問題了", 3, "/path/to/my-errors.log");
?>
進階除錯工具
Symfony VarDumper (Dump and Die)
如果你使用 Composer,強烈建議安裝這個工具。它提供更漂亮的格式化輸出。
composer require symfony/var-dumper
安裝後,你可以使用 dd() (Dump and Die) 函數,它會印出內容後直接終止程式:
<?php
require 'vendor/autoload.php';
$data = ['a' => 1, 'b' => 2];
dd($data); // 輸出漂亮格式並停止執行
?>
Xdebug
Xdebug 是 PHP 最強大的除錯擴充,它支援:
- Step Debugging:可以讓程式暫停在某一行,逐步檢查狀態。
- Stack Traces:詳細的錯誤呼叫堆疊。
- Profiling:分析程式碼效能瓶頸。
大多數現代 IDE (如 VS Code, PhpStorm) 都能完美整合 Xdebug。
除錯檢查清單
當程式不如預期時,請依序檢查:
- 分號
;:是否漏掉結尾? - 變數名稱:PHP 變數有區分大小寫,
$Name不等於$name。 - 錯誤訊息:查看
display_errors或系統 Log 裡的具體錯誤內容。 - dump 關鍵點:在關鍵步驟使用
var_dump()檢查資料流是否符合預期。 - 括號匹配:
{}或()是否成對。