file_get_contents не будет выводиться в моем скрипте обработчика ошибок - PullRequest
0 голосов
/ 22 ноября 2018

У меня странная проблема с пользовательской функцией-обработчиком ошибок, которая обрабатывает фатальные ошибки.Ошибка на моем веб-сайте: «Неустранимая ошибка: допустимый объем памяти 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

...