我正在尝试让错误记录工作,以便错误不会在我的实时网站上显示给我以外的人(通过我的IP地址识别),但它不起作用,因为显然ini_set()
被禁用我的服务器由于“安全原因”。这是我试图使用的代码:
error_reporting(E_ALL);
ini_set('display_errors', 0);
ini_set('log_errors', 1);
ini_set('error_log', '/path/to/php-error.log');
我不想硬编码禁用显示错误的选项,因为我在我的PHP页面中检查是否是我的IP地址访问网站,如果是这样仍然显示错误。
有没有办法记录错误,动态更改它们是否显示在页面上,而不使用ini_set()
?
答案 0 :(得分:2)
您应该看看PHP的内置自定义错误处理函数,您可以将验证构建到其中。这将使用自定义函数替换PHP的错误处理程序。
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
$ip = $_SERVER['REMOTE_ADDR'];
if ( $ip != '127.0.0.1' ) return true; // Leave if not your IP
switch ($errno) {
case E_USER_ERROR:
echo "<b>My ERROR</b> [$errno] $errstr<br />\n";
echo " Fatal error on line $errline in file $errfile";
echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
echo "Aborting...<br />\n";
exit(1);
break;
case E_USER_WARNING:
echo "<b>My WARNING</b> [$errno] $errstr<br />\n";
break;
case E_USER_NOTICE:
echo "<b>My NOTICE</b> [$errno] $errstr<br />\n";
break;
default:
echo "Unknown error type: [$errno] $errstr<br />\n";
break;
}
/* Don't execute PHP internal error handler */
return true;
}
set_error_handler("myErrorHandler");
手册中的更多信息:http://www.php.net/manual/en/function.set-error-handler.php