PHPで500 Internal Server Errorを発生させ、Apacheのエラーページを表示させる。
PHP で 500 Internal Server Error や 404 Page Not Found という Apache のエラーを発生させるにはどうしたらよいでしょうか?
500 Internal Server Errorについては、次のコードを試してみました。
header("HTTP/1.0 500 Internal Server Error");
しかし、それは私に空白のページを表示します。 どうすれば、Apacheのデフォルトフォーマットでエラーを表示できますか?
ご指導お願いします。
39
3
Apache のエラー文書を Web ルートにコピーして (あるいはシンボリックリンクして)
header()
を使ってエラーコードを設定し、それらの文書を出力することができます。おそらく、やむを得ない理由がない限り、これがベストでしょう。しかし、それがうまくいかない場合、いくつかの代替手段があります(とはいえ厄介な代替手段ですが)。500の場合、あなたのコードにバグを仕掛けるだけです。
PHPスクリプトは例外を発生させ、通常のApache 500エラーページを生成します。(ただし、PHP initの設定
display_errors
が0
に設定されている場合のみ、Apacheのエラーになるという注意点に注意してください。ほとんどの開発環境では、これは当てはまりません。ほとんどの開発環境では、これはあてはまりません。実運用サーバーの設定がわからない場合は、これが動作するかどうかをテストする必要があります)。404の場合は、存在しないページにリダイレクトするのが精一杯だと思います。これは全く同じものではありませんが、あなたの目的には適しているかもしれません。
ほとんどのブラウザでは、ユーザーは実際にリダイレクトを見ることはなく、ただ静かに素早く存在しないページにリダイレクトされ、結果として通常のApache 404エラーになります。もちろん、URLは変更されているので、それに気づくユーザーもいるかもしれません。もしそれが受け入れられないなら、おそらく Apache mod_rewrite を使って url のバックエンドを存在しない場所に書き換えて、同様の結果を得ることができます。
いくつかのコメントへの返答です。header()` (または他の方法) を使ってレスポンスコードを設定しても、 Apache の標準的なエラードキュメントは生成されません。それは単にあなた自身の出力と一緒にそのレスポンスコードを返します。これは意図的な動作であり、カスタムエラー文書を持つことができるように、 あるいはどのようなリクエストに対しても HTTP の仕様に従ったレスポンスコードを設定できるように設計されています。もしあなたが Apache エラー文書が欲しいなら、それらを偽造するか(単にエラー文書をあなたのウェブルートにコピーするという私の最初の提案のように)、またはそれらを返すように Apache を騙さなければなりません(私のバックアップの提案のように)。
このような知識豊富な議論の後、私はデフォルトの500 Internal Server Errorを表示できるPHPコードはないと思っています。 解決策は 1.phpファイルの隣にhttp500というフォルダを作成する。
2.2. その中に .htaccess ファイルを作成し、次のコードを追加します。
3.PHPのリダイレクトコード:
どうやら http_response_code という関数があるようで、それを使えばレスポンスコードを適切に設定できるようです。もしそれがうまくいかない場合(ドキュメントにはSVNにしかないとの注記があります)、
header
関数はオプションでレスポンスコードを引数として取ることができます。これは Apache に正しくシグナルを送るはずです。