错误报告
默认情况下,如果脚本中出现意外情况,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");
}
});
此方法会将消息记录到数据库中,如果该消息未能成为文件而不是直接将其回显到页面中。这样,你就可以跟踪用户在你网站上遇到的情况,并在出现问题时立即通知你。