2009-04-13 12 views
0

Windows/IIS/PHPウェブホストでカスタム404エラーページを実装する際に問題が発生しました。ヘッダーに404ステータスメッセージを送信しようとするたびに、コンテンツはクライアントに送信されず、代わりに空のページが表示されます。ここでPHP 404エラーページにコンテンツが表示されません

は、私が使用している非常に単純なスクリプトです:私のdevのマシンで

<?php 
    header('HTTP/1.1 404 Not Found'); 
    header('Status: 404 Not Found'); 
    var_dump(headers_list()); 
?> 

(ブラウザに表示)の出力は出力がない私のホスト上で

array(2) { [0]=> string(23) "X-Powered-By: PHP/5.2.6" [1]=> string(21) "Status: 404 Not Found" } 

です。私は何のコンテンツもPHPにエコーされているかどうかに関わらず空白のページを生成するようには見えません。ロギング、データベース書き込みなどは通常どおり続行されます。

誰でも問題の原因や解決方法を提案できますか?

+0

FirefoxとIEで同じ結果が得られましたか?そうでない場合、私は答えを知っている可能性があります – OneNerd

答えて

2

CGIで実行するようにホストでPHPを設定した場合、IISで404エラーページを生成することはできません(200 OKを返すことを除いて、Bad Thingです)。確かに私はCGI 404エラーをブラウザに許すようにIIS 4-6.0を説得することができませんでした。

あなたは一般に、PHPにCGIを実行させたくないのですが、他に関連する問題や遅いことがあります。 IISでは、PHP ISAPI拡張を優先する必要があります(この特定の問題を解決することはできませんが、確認できません)。

2

PHPタグの後にテキストを挿入するとどうなりますか?

また、Apacheのエラーログを確認したり、スクリプトでphp -lを実行したり、error_reporting onやdisplay_errorsをオンにしたりして、ホストでエラーが発生していないことを確認してください。

+0

あなたが示唆したように、私はコードを変更しました: <?PHP error_reporting(E_ALL);ini_set( 'display_errors'、 '1'); ヘッダー( 'HTTP/1.1 404 Not Found'); ヘッダー( 'Status:404 Not Found'); var_dump(headers_list()); ?> CONTENT 出力はまだホスト上では空白です。 – Loftx

+0

申し訳ありませんが、あまりにもうまく表示されませんでした - また、私のホストは私のためにサーバのコマンドラインでスクリプトを実行しました:array(0){}とエラーはありません。 header()は、Webサーバー経由でphpが呼び出されたときのためのものです。 – Loftx

+0

"CONTENT"が – Matt

5

「空白ページ」は、error_reporting(0)のような臭いが表示されます。ヘッダーの前に出力があり、エラーが発生する可能性があります。それを確認します。

+0

+1と出力されるまで一行ずつコメントアウトしてみてください。愚かではありますが、何度もこのメッセージが表示されます。 – Cruachan

0

ホストで、PHPでヘッダーを即座に変更できることを確認してください。私のホストではPHPを介して404ヘッダーを設定することはできませんが、他のヘッダー(301、content-type)は問題ありません。

0

私の助言は、HTTP/1.1 404ヘッダーを自分で設定せず、Webサーバーでそれを実行させることです。

伝統的に、これはWebサーバーが取るべきHTTPヘッダー、つまりHTTP/1.0または1.1 404 Not FoundヘッダーになるStatusヘッダーによって行われます。

(サイド注:Statusヘッダは実際のHTTPヘッダではなく、サーバ自体にアプリからの情報を通信するためにのみ使用される)

1

Iは、Linux上のPHP 5.2.6と同じ問題を抱えています。最初の8109バイトがWebサーバーによって印刷されないことがわかりました。

IE6は、カスタムエラーページ<の長さを無視します。これはこの問題の説明かもしれませんが、とにかく複数のブラウザでテストしたことがあります。