Как найти причину 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 цифр
                                                                         
888888888888 ad88888ba ad888888b, ,d8 ad88888ba
,8P' d8" "8b d8" "88 ,d888 d8" "88
d8" Y8a a8P a8P ,d8" 88 8P 88
,8P' "Y8aaa8P" ,d8P" ,d8" 88 Y8, ,d88
d8" ,d8"""8b, a8P" ,d8" 88 "PPPPPP"88
,8P' d8" "8b a8P' 8888888888888 8P
d8" Y8a a8P d8" 88 8b, a8P
8P' "Y88888P" 88888888888 88 `"Y8888P'

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