PHP的死亡白屏

现在我开始回到PHP,我开始记住为什么我放弃了它。 我现在最讨厌的东西就是我所说的“PHP的死亡白屏”。 当PHP由于语法或其他原因而发生致命错误时,似乎在没有实际向浏览器发送任何东西的情况下,它总是会死掉。 我已将以下内容添加到我的.htaccess ,并且它似乎在大多数时间都有效,但在这些情况下它不起作用。

php_value display_errors 1
php_value display_startup_errors 1
php_value error_reporting 2147483647 # E_ALL

我错过了什么吗? 目前,我觉得我需要刷新每隔几行代码的内容,以免我犯了一个错误,必须搜索很多页面,试图找出我犯的一个小错误......

编辑:例如,给出以下两行代码:

$foo = array(':language' => $languageId;
$foo = array(':language' => $languageId);

第一个将展现死亡的白色屏幕(即,根本没有任何东西印在浏览器上),而第二个则会愉快地执行。


错误和警告通常出现在....logsphp_error.log....logsapache_error.log具体取决于您的php.ini设置。

也有用的错误通常指向浏览器,但由于它们不是有效的html,它们不会显示。

因此, "tail -f ”你的日志文件,当你得到一个空白屏幕使用IE浏览器“查看” - >“源”菜单选项来查看原始输出。


以下代码应显示所有错误:

<?php

// ----------------------------------------------------------------------------------------------------
// - 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%sxAB at line %d: %sn", $name, @basename($file), $line, $message)));
};

$old_error_handler = set_error_handler("ErrorHandler");

// other php code

?>

使用此代码生成空白页的唯一方法是在关闭处理程序中出现错误时。 我从我自己的cms中复制并粘贴了这个文件,但没有经过测试,但我确定它能正常工作。


我总是在php脚本的最上面使用这个语法。

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 'On');  //On or Off
链接地址: http://www.djcxy.com/p/11861.html

上一篇: PHP's white screen of death

下一篇: Call to a member function prepare() on a non