У меня странная проблема с пользовательской функцией-обработчиком ошибок, которая обрабатывает фатальные ошибки.Ошибка на моем веб-сайте: «Неустранимая ошибка: допустимый объем памяти 134217728 байт исчерпан», что, конечно, я исправлю.Но я хочу, чтобы пользовательская страница ошибок показывалась, если это произойдет снова.
Следующий код отображает номер 1, но не мой «error-page.php» и не отображает номер 2. Так что это похоже на сценарийошибка в строке file_get_contents - но это не говорит мне, почему.
Что еще хуже - это хорошо для моего сервера разработки!Но я не могу думать о разнице в настройках, которая могла бы повлиять на это.
Чтобы попытаться решить эту проблему, у меня есть echo'd полный путь для file_get_contents, и он правильный - и file_exists возвращает true - поэтому ясовершенно озадачен!
Стоит отметить - error-page.php - это просто статическая HTML-страница, поэтому в этом нет обидного кода!Это даже не file_get_contents a 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