錯誤報告

預設情況下,如果指令碼中出現意外情況,PHP 將直接在頁面上輸出錯誤警告通知訊息。這對於解決指令碼的特定問題非常有用,但同時它會輸出你不希望使用者知道的資訊。

因此,最好避免顯示那些將在生產環境中顯示有關伺服器資訊的訊息,例如目錄樹。在開發或測試環境中,為了進行除錯,這些訊息可能仍然有用。

快速解決方案

你可以將其關閉,以便根本不顯示訊息,但這會使除錯指令碼變得更加困難。

<?php
  ini_set("display_errors", "0");
?>

或者直接在 php.ini 中更改它們。

display_errors = 0

處理錯誤

更好的選擇是將這些錯誤訊息儲存到一個更有用的地方,比如資料庫:

set_error_handler(function($errno , $errstr, $errfile, $errline){
  try{
    $pdo = new PDO("mysql:host=hostname;dbname=databasename", 'dbuser', 'dbpwd', [
      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    ]);

    if($stmt = $pdo->prepare("INSERT INTO `errors` (no,msg,file,line) VALUES (?,?,?,?)")){
      if(!$stmt->execute([$errno, $errstr, $errfile, $errline])){
        throw new Exception('Unable to execute query');
      }
    } else {
      throw new Exception('Unable to prepare query');
    }
  } catch (Exception $e){
    error_log('Exception: ' . $e->getMessage() . PHP_EOL . "$errfile:$errline:$errno | $errstr");
  }
});

此方法會將訊息記錄到資料庫中,如果該訊息未能成為檔案而不是直接將其回顯到頁面中。這樣,你就可以跟蹤使用者在你網站上遇到的情況,並在出現問題時立即通知你。