5 回答

TA貢獻1858條經(jīng)驗 獲得超8個贊
以下代碼應(yīng)顯示所有錯誤:
<?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%s\xAB at line %d: %s\n", $name, @basename($file), $line, $message)));
};
$old_error_handler = set_error_handler("ErrorHandler");
// other php code
?>
使用此代碼生成空白頁的唯一方法是在關(guān)閉處理程序中出現(xiàn)錯誤。我在沒有測試的情況下從我自己的cms復(fù)制并粘貼了它,但我確信它有效。

TA貢獻1966條經(jīng)驗 獲得超4個贊
我總是在php腳本的頂部使用這種語法。
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 'On'); //On or Off

TA貢獻1786條經(jīng)驗 獲得超11個贊
可以注冊一個鉤子以使最后一個錯誤或警告可見。
function shutdown(){
var_dump(error_get_last());
}
register_shutdown_function('shutdown');
將此代碼添加到index.php的開頭將幫助您調(diào)試問題。

TA貢獻1852條經(jīng)驗 獲得超1個贊
這是加載與運行時配置的問題
重要的是要認(rèn)識到在編譯或解析步驟期間發(fā)生語法錯誤或解析錯誤,這意味著PHP將在它甚至有機會執(zhí)行您的任何代碼之前保釋。因此,如果您display_errors
在運行時修改PHP的配置(這包括從使用ini_set
代碼到使用.htaccess,這是運行時配置文件),那么只有默認(rèn)加載的配置設(shè)置正在運行。
如何始終避免開發(fā)中的WSOD
要避免使用WSOD,您需要確保已加載的配置文件已display_errors
打開并error_reporting
設(shè)置為-1
(這是等效的E_ALL,因為它確保所有位都打開,無論您運行的是哪個版本的PHP)。不要硬編碼E_ALL的常量值,因為該值可能會在不同版本的PHP之間發(fā)生變化。
加載的配置是您加載的php.ini
文件或您的apache.conf
或httpd.conf
或虛擬主機文件。這些文件只在啟動階段(例如,當(dāng)您第一次啟動apache httpd或php-fpm時)讀取一次,并且僅被運行時配置更改覆蓋。確保display_errors = 1
與error_reporting = -1
您加載的配置文件可以確保你永遠(yuǎn)不會看到一個WSOD不管語法或解析像一個運行時的變化之前出現(xiàn)的錯誤ini_set('display_errors', 1);
或error_reporting(E_ALL);
可能發(fā)生。
如何找到你的(php.ini)加載的配置文件
要找到已加載的配置文件,只需使用以下代碼創(chuàng)建一個新的PHP文件...
<?php phpinfo();
然后將瀏覽器指向那里并查看已解析的已加載配置文件和其他.ini文件,這些文件通常位于您的頂部,phpinfo()
并將包含所有已加載配置文件的絕對路徑。
如果您看到(none)
而不是文件,這意味著您在配置文件(php.ini)路徑中沒有php.ini。所以你可以從這里下載與PHP捆綁的股票php.ini并將其作為php.ini復(fù)制到你的配置文件路徑,然后確保你的php用戶有足夠的權(quán)限從該文件中讀取。您需要重新啟動httpd或php-fpm才能加載它。請記住,這是與PHP源捆綁在一起的開發(fā) php.ini文件。所以請不要在生產(chǎn)中使用它!
只是不要在生產(chǎn)中這樣做
這確實是避免開發(fā)WSOD的最佳方法。任何人建議您放置ini_set('display_errors', 1);
或error_reporting(E_ALL);
放在PHP腳本的頂部或使用.htaccess,就像您在此處所做的那樣,如果加載的配置文件出現(xiàn)語法或解析錯誤(如此處的情況),則無法幫助您避免WSOD已經(jīng)display_errors
關(guān)閉了。
許多人(以及PHP的庫存安裝)將使用display_errors
默認(rèn)關(guān)閉的production-ini文件,這通常會導(dǎo)致您在此遇到的同樣挫折。因為PHP在啟動時已經(jīng)關(guān)閉了它,然后遇到語法或解析錯誤,并且沒有任何輸出就會失敗。您希望ini_set('display_errors',1);
PHP腳本的頂部應(yīng)該避免這種情況,但是如果PHP無法解析您的代碼也無關(guān)緊要,因為它永遠(yuǎn)不會到達(dá)運行時。

TA貢獻1824條經(jīng)驗 獲得超5個贊
錯誤和警告通常出現(xiàn)在....\logs\php_error.log
或....\logs\apache_error.log
取決于您的php.ini設(shè)置。
有用的錯誤通常也會定向到瀏覽器,但由于它們不是有效的html,因此不會顯示。
所以"tail -f
“你的日志文件和當(dāng)你得到一個空白的屏幕使用IE瀏覽器” - >“源”菜單選項來查看原始輸出。
- 5 回答
- 0 關(guān)注
- 999 瀏覽
添加回答
舉報