0

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

これが私が使用している非常に単純なスクリプトです:

<?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によってエコーされるコンテンツ、または通常のHTMLとして以下に含まれるコンテンツに関係なく、空白のページ以外は生成されないようですが、ログ記録、データベース書き込みなどのPHP処理は通常どおり続行されます。

誰かが問題が何であるか、またはそれを解決する方法を提案できますか?

4

6 に答える 6

5

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

于 2009-04-13T15:47:34.260 に答える
2

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

また、Apacheエラーログを確認するか、スクリプトでphp -lを実行するか、error_reportingをオンにしてdisplay_errorsをオンにするかにかかわらず、スクリプトがホストでエラーになっていないことを確認してください。

于 2009-04-13T14:29:51.857 に答える
2

ホストで PHP が CGI を介して実行するように構成されている場合、IIS で 404 エラー ページを生成できない場合があります (嘘をついて 200 OK を返す場合を除きます。これは悪いことです)。確かに、IIS 4-6.0 を説得して私の CGI 404 エラーがブラウザに送信されるようにすることはできませんでした。

いずれにしても、PHP で CGI を実行することは望ましくありません。他の関連する問題があり、速度が遅いこともあります。IIS では、PHP ISAPI 拡張機能を優先する必要があります (ただし、試したことがないため、この特定の問題が解決されるかどうかは確認できません)。

于 2009-04-13T16:31:50.037 に答える
1

Linux 上の PHP 5.2.6 でも同じ問題があります。最初の 8109 バイトが Web サーバーによって出力されていないことがわかりました。

IE6 は、長さが 512 バイト未満のカスタム エラー ページを無視します。これがこの問題の説明かもしれませんが、おそらく複数のブラウザーでテストしたことがあるでしょう。

于 2009-08-20T08:14:19.513 に答える