2009-11-22 4 views
10

致命的なエラーで特定のページにリダイレクトするためにPHPに普遍的に伝える方法はありますか?すべてのエラーをキャッチし、PHPでページにリダイレクト

私は多くの異なるファイルを持つサイトを持っていますが、エラーが何であるかに関係なく、同じエラーページにユーザーを送信したいと思います。

エラーを表示したくないという議論のためにちょうどふりをして、23ページ目または51ページ目の編集ごとにエラーを引き起こすロボットによってページが継続的に編集および更新されています。

私はおそらくphp.iniファイルやhtaccessを含む何かを探していますが、私はサイト全体でできることがあります。

+0

最後に私の解決策を得た後、http:http ://stackoverflow.com/a/19263800/1993494 – relipse

答えて

5

あなたは、Apacheのデフォルト500エラーページを変更することができます'ErrorDocument'指示文を使用します。

ErrorDocument 500 /500.html 

これは500内部サーバーエラーを500.htmlにリダイレクトします。 PHPページを使用して参照ページをメールすることもできます。

エラーをキャッチするには、エラーをerror.logファイルに記録できます。 php.iniファイルで次の2つの指令を使用してください:

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

Apacheを再起動するのを忘れないでください。

+4

これはPHPエラーでは機能しません。 – Cybot

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とは異なり、この1つはまたfatalsをキャッチ)

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 構文解析エラーが発生した場合、このコードは機能しません。インクルードはあなたのスクリプトを黙って失敗させ、トレースをあまり残しません。 誰かがこれを入力した場合、私はすべて耳にします。 –

+0

これは実際に私のために働いた答えにいくらか近いです。 http://stackoverflow.com/a/19263800/1993494 – relipse