关于处理致命错误的自定义错误处理程序功能,我遇到了一个奇怪的问题。我网站上的错误是“致命错误:允许的内存大小为134217728字节已用尽”-我当然会解决。但我希望自定义错误页面显示是否再次发生。
以下代码回显数字1,但不显示我的“ error-page.php”,也不回显数字2。因此,感觉脚本在file_get_contents行上出错-但没有告诉我原因。
让事情变得更糟-在我的开发服务器上可以正常响应!但我想不出会造成这种影响的设置差异。
要尝试解决此问题,我已经回显了file_get_contents的完整路径,这是正确的-并且file_exists返回true-所以我很沮丧!
值得一提的是-error-page.php只是一个静态HTML页面,因此没有令人讨厌的代码!甚至不会file_get_contents一个test.txt。
error_reporting(-1);
set_error_handler("customErrorPage");
register_shutdown_function('shutdownFunction');
function shutdownFunction()
{
$last_error = error_get_last();
if ($last_error['type'] === E_ERROR) {
fatalErrorHandler(E_ERROR, $last_error['message'], $last_error['file'], $last_error['line'], "");
}
}
function fatalErrorHandler($error_level,$error_message,$error_file,$error_line,$error_context) {
http_response_code(500);
$errorEmail = "<strong>Error on page:</strong> http://" . $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"] . "<br />\n";
$errorEmail .= "<strong>Message:</strong> " . $error_message . "<br />\n";
$errorEmail .= "<strong>IP:</strong> " . getRealIpAddr() . "<br />\n";
$errorEmail .= "<strong>Line:</strong> " . $error_line . "<br />\n";
$errorEmail .= "<strong>File:</strong> " . $error_file . "<br />\n";
if ((strpos($_SERVER['SERVER_NAME'], ".com") > 0)) {
$to = "james@email.com";
$subject = "FATAL Error on " . $_SERVER["SERVER_NAME"] . " - " . $error_message;
$headers = "MIME-Version: 1.0'" . "\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1". "\r\n";
$headers .= "From: " . WEBSITE_COMPANY . " <errors@" . WEBSITE_DOMAIN . ">" . "\r\n";
mail($to, $subject, $errorEmail, $headers);
echo "1";
echo file_get_contents($_SERVER["DOCUMENT_ROOT"] . "includes/error-page.php");
echo "2";
die;
} else {
echo $errorEmail;
die;
}
}
这是我在运行脚本时在屏幕上看到的内容:
严重错误:耗尽的134217728字节允许的内存大小(尝试 分配14907个字节) /home/sure-wise/htdocs/objects/myaccount.php在2666行1