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