Как найти причину WSOD (белого экрана вместо страницы) в php, когда обычные решения не помогают

В случае если скрипт php не выполняется и ничего не выводит (WSOD, White Screen Of Death) - очевидные и правильные решения это настроить отображение/логирование ошибок в конфигах php и веб-сервера, установка отладчика (например, xdebug).

Далее код, который заменяет стандартный обработчик ошибок и просто выводит их на экран.
Брутально, но может помочь если очевидные решения по каким либо причинам не подходят и не обнаруживают ошибок.

Код надо вставлять в начало выполняемого скрипта, сразу после открывающего тега (скорее всего в index.php, init.php и подобные, если вы используете готовую CMS)

// ----------------------------------------------------------------------------------------------------
// - Display Errors
// ----------------------------------------------------------------------------------------------------
 
ini_set('display_errors', 'On');
ini_set('html_errors', 0);
 
// ----------------------------------------------------------------------------------------------------
// - Error Reporting
// ----------------------------------------------------------------------------------------------------
 
error_reporting(-1);
 
// ----------------------------------------------------------------------------------------------------
// - Shutdown Handler
// ----------------------------------------------------------------------------------------------------
 
function ShutdownHandler()
        {
        if (@is_array($error = @error_get_last()))
                {
                return (@call_user_func_array('ErrorHandler', $error));
                };
        return (TRUE);
        };
register_shutdown_function('ShutdownHandler');
 
// ----------------------------------------------------------------------------------------------------
// - Error Handler
// ----------------------------------------------------------------------------------------------------
 
function ErrorHandler($type, $message, $file, $line)
        {
        $_ERRORS = Array(
                0x0001 => 'E_ERROR',
                0x0002 => 'E_WARNING',
                0x0004 => 'E_PARSE',
                0x0008 => 'E_NOTICE',
                0x0010 => 'E_CORE_ERROR',
                0x0020 => 'E_CORE_WARNING',
                0x0040 => 'E_COMPILE_ERROR',
                0x0080 => 'E_COMPILE_WARNING',
                0x0100 => 'E_USER_ERROR',
                0x0200 => 'E_USER_WARNING',
                0x0400 => 'E_USER_NOTICE',
                0x0800 => 'E_STRICT',
                0x1000 => 'E_RECOVERABLE_ERROR',
                0x2000 => 'E_DEPRECATED',
                0x4000 => 'E_USER_DEPRECATED'
        );
        if (!@is_string($name = @array_search($type, @array_flip($_ERRORS))))
                {
                $name = 'E_UNKNOWN';
                };
        return (print (@sprintf("%s Error in file \xBB%s\xAB at line %d: %s\n", $name, @basename($file) , $line, $message)));
        };
$old_error_handler = set_error_handler("ErrorHandler");


Оставить комментарий

Содержание этого поля является приватным и не предназначено к показу. Если есть аккаунт Gravatar, то отображается глобальный аватар.

Подробнее о форматировании

КАПЧА
А ты не робот? Введи 5 цифр
                                                                 
ad88888ba ad888888b, ad888888b, ad888888b, 88
d8" "88 d8" "88 d8" "88 d8" "88 ,d88
8P 88 a8P a8P a8P 888888
Y8, ,d88 aad8" aad8" aad8" 88
"PPPPPP"88 ""Y8, ""Y8, ""Y8, 88
8P "8b "8b "8b 88
8b, a8P Y8, a88 Y8, a88 Y8, a88 88
`"Y8888P' "Y888888P' "Y888888P' "Y888888P' 88

Enter the code depicted in ASCII art style.
To prevent automated spam submissions leave this field empty.