2016-08-03 25 views
0

如果我在我的代碼中意外犯了一個錯誤,使用PHP顯示500頁是否可能?我嘗試使用error_reporting(0)但這隻會隱藏錯誤。如果我使用htaccess的php_flag display_errors off瀏覽器(以及其他瀏覽器)將只顯示500錯誤像這樣的:http://image.prntscr.com/image/4c87df1998634097a18a85d268ccc818.png如果發現PHP錯誤,請包含500個文件

謝謝:)

+0

只是爲了澄清:你想顯示一個頁面,如果500錯誤發生? – Fairy

+0

一般規則:如果你得到一個500錯誤,你首先要檢查的是服務器的錯誤日誌,以獲取500. –

+0

@Fairy不,如果我在我的PHP代碼中犯了一個錯誤,我想顯示一個500頁用戶看不到PHP警告。我知道我可以隱藏它們,但我更願意展示一個有用的500頁而不是 –

回答

2

在PHP 5.x中,您可以捕獲除了致命錯誤之外的所有錯誤。只要看看http://php.net/manual/en/function.set-error-handler.php

簡單的例子:

<?php 
function handler($errno, $errstr, $errfile, $errline) 
{ 
    echo file_get_contents('500.html'); 
    die(); 
} 
set_error_handler('handler', E_ALL); 
+0

非常感謝:P –

2

Combianate這些功能使一個重定向錯誤:

error_get_last()#得到lasterror

header()#至rediect如果需要

register_shutdown_function()#發現error_get_last錯誤

ob_start()/ob_flush()#抓內容,後期表現或不

在你的PHP文件的開頭:

ob_start(); 
register_shutdown_function(function(){ 
    $err = error_get_last(); 
    //check the $err 
    if($err){ 
     header('Location: 505.html'); 
     exit; 
    } else { 
     ob_flush();#or ob_end_flush(); 
     exit; 
    } 
}); 

您還可以趕上這個致命錯誤。

+0

感謝您的支持!但它也可以捕獲解析錯誤? –

+0

'解析錯誤',如果你的意思是PHP代碼解析錯誤:不。編譯是在執行之前和編譯時檢查語法中的錯誤 – JustOnUnderMillions

+0

php_check_syntax(string $ filename [,string&$ error_message]) – JustOnUnderMillions