Как найти причину 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 цифр
                                                                       
ad888888b, ad888888b, 888888888888 8888888888 ad8888ba,
d8" "88 d8" "88 ,8P' 88 8P' "Y8
a8P a8P d8" 88 ____ d8
aad8" ,d8P" ,8P' 88a8PPPP8b, 88,dd888bb,
""Y8, a8P" d8" PP" `8b 88P' `8b
"8b a8P' ,8P' d8 88 d8
Y8, a88 d8" d8" Y8a a8P 88a a8P
"Y888888P' 88888888888 8P' "Y88888P" "Y88888P"

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