2009-11-22 90 views
10

有沒有說方式普遍告訴PHP重定向到任何致命錯誤的某個頁面?捕捉所有的錯誤,並重定向到頁面用PHP

說我有一個網站有很多不同的文件,我想隱藏問題(同時仍然記錄它們)並將用戶發送到相同的錯誤頁面,無論錯誤是什麼或他們在哪個頁面上。

讓我們只是爲了論證而假裝我不想看到錯誤,並且頁面正在被機器人不斷編輯和更新,這些機器人每23或51頁編輯就會導致錯誤。

我正在尋找一些可能涉及php.ini文件或htaccess的東西,我可以在網站上做些什麼。

+0

當我終於得到它的工作,我張貼我的解決方案在這裏:http ://stackoverflow.com/a/19263800/1993494 – relipse 2013-10-09 05:31:28

回答

5

您可以更改的Apache默認的500錯誤頁面與'ErrorDocument'指令:

ErrorDocument 500 /500.html 

這會將500內部服務器錯誤重定向到500.html。你也可以在那裏使用一個PHP頁面並郵寄引用頁面。

要捕獲錯誤,您可以將這些錯誤記錄到error.log文件中。在你的php.ini文件中使用以下兩個指令:

error_log = /var/log/httpd/error_php 
log_errors = On 

不要忘記重新啓動Apache。

+4

這不適用於PHP錯誤。 – Cybot 2013-07-17 07:27:29

9

set_error_handler

set_error_handler - 設置 用戶定義的錯誤處理函數

基本的例子:

<?php 

function errorHandler($n, $m, $f, $l) { 
    header('Location: http://example.com/error.php'); 
} 

set_error_handler('errorHandler'); 
... 
?> 
5

首先,改變你的php.ini取消錯誤消息,並啓用日誌記錄:

display_errors=Off 
log_errors=On 
error_log=whatever/path 

寫一個錯誤處理程序(不同於set_error_handler,這其中也抓住嚴重錯誤)

register_shutdown_function('errorHandler'); 
function errorHandler() { 
    $err = error_get_last(); 
    if($err) 
    include "error_page.php"; // your custom error page 
} 

將這個在一個文件中的代碼,並告訴PHP將其包括在每個請求(見auto_prepend_file @http://php.net/manual/en/ini.core.php

+0

Ref:http://stackoverflow.com/questions/2171055/register-shutdown-function-registered-function-cannot-include-files-if-terminat 如果您遇到語法分析錯誤,此代碼將不起作用。這些包含會使你的腳本默默地失敗,並沒有留下太多痕跡。 如果有人對此有任何意見,我是全部耳朵。 – 2010-01-31 16:48:16

+0

這實際上有點接近爲我工作的答案。 http://stackoverflow.com/a/19263800/1993494 – relipse 2013-10-09 05:31:06