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