看来,您的目标是禁止包含不存在的文件的错误消息。
您可以这样做:
$old = ini_set('display_errors', 0); // Do not show errors to client
$fileExists = file_exists($someFile) && is_readable($someFile);
ini_set('display_errors', $old); // Restore old value
if (!$fileExists)
die('Error opening admin page');
include($someFile);
为什么要这么多步骤?
file_exists
并且还会is_readable
在某些情况下打印错误消息:可能存在safe_mode
或open_basedir
限制问题(并非每个人都已经使用 PHP 5.3)。服务器也可能运行suPHP
它也会使文件不可读。
为什么是错的?
您的概念:依靠隐蔽文件的名称进行伪身份验证称为“隐蔽安全”。例如,任何有权访问您的浏览器历史记录的人都会知道该 URL。这不是很安全...
我的回答:简单地关闭display_errors
就像设置error_reporing
为零一样安全:根本不是。例如:一旦安装了自定义错误处理程序,这两个设置都将被“忽略”。自定义错误处理程序有责任相应地检查这些值。
php.ini
您可能会考虑为您的生产和开发环境使用不同的设置。理想情况下,第一个应该不显示任何错误消息,而后者应该溢出所有错误消息。
继续阅读: