
数年前、私のスタジオの誰かが Web ページをデザインしましたが、クライアントがサーバーを変更することにしました (Gen2 SMP、64 ビット、PHP バージョン 5.3.8、標準 MYSQL バージョン 5 を実行する Linux Apache サーバーに移行しました)。突然、奇妙な動作が起こり始めました。
ログインが必要なリンクをクリックすると、ページはheader()
PHP の関数を使用してログイン ページにリダイレクトします。興味深いことに、ページには次のように表示されます。
わかりました
サーバーで内部エラーまたは構成ミスが発生したため、リクエストを完了できませんでした。サーバー管理者 ([アドレスなし]) に連絡して、エラーが発生した時刻と、エラーの原因となった可能性のある操作をお知らせください。このエラーに関する詳細情報は、サーバーのエラー ログで参照できる場合があります。 HTTP/1.1 200 OK 日付: 2012 年 10 月 15 日 (月) 17:27:32 GMT サーバー: Apache/2.2.22 (Unix) FrontPage/5.0.2.2635 X-Powered-By: PHP/5.3.8 有効期限: 1981 年 11 月 19 日 (木) 08:52:00 GMT キャッシュ制御: no-store、no-cache、must-revalidate、post-check=0、pre-check=0 プラグマ: no-cache キープアライブ: timeout=5、max=399 接続: Keep-Alive 転送エンコーディング: chunked コンテンツ タイプ: text/html 232c
次にページ自体、そして別のヘッダーが表示されます。
0 1f4
わかりました
サーバーで内部エラーまたは構成ミスが発生したため、リクエストを完了できませんでした。サーバー管理者 ([アドレスなし]) に連絡して、エラーが発生した時刻と、エラーの原因となった可能性のある操作をお知らせください。このエラーに関する詳細情報は、サーバーのエラー ログで参照できます。0
最も興味深いのは、ページを更新するか、URL で Enter キーを押すと、正しく読み込まれることです。ログを確認しましたが、存在しないファビコンだけが原因です。.htaccess も確認しましたが、すべて正しかったです (RewriteBase は意図したとおり / で、^en/ リクエストを request?lang=en に移動する別のルールがあるだけです)。このような状況に遭遇した人はいますか?
編集: IE はこれら 2 つのヘッダーをトリガーしません。これはますます奇妙になってきています。
ソリューション!: @adaptr が指摘したように、これは PHP の問題であり、サーバー関連の問題ではありませんでした。最後のコーダー (前任者を責めるのは失礼だとは思いますが、この状況で時間がかかりすぎました) は次のようにしました。
/* config.php -> included everywhere as a bootstrap*/
// ... constant/mysql setup
if($notLogged)
{
$forward = ...;//previous url
header("Location: ".WWW.LANG."/customer-area/login/index.php?forward=".$forward);
exit;
}
さらに詳しく調べてみると、あることが私を困惑させました。exit;
ヘッダーを正しく送信するのでしょうか、それともしないのでしょうか? もちろん、それを削除してもexit;
ページは実行され続けます (まったく正しくないことはわかっています。だからこれまで試さなかったのです)。ただし、ヘッダーが完全に送信されていなかったら、何らかの問題が発生する可能性があります (私はサーバー担当者ではないので、その点についてはよくわかりません。申し訳ありません)。そのexit;
呼び出しを削除した後、ページは正しく形成され、ヘッダーは「閉じられ」 (出力開始のため)、すべての歯車が再び動き始めました。皆さん、ありがとうございました。最高の賞金 100 ポイント =)
答え1
Apache ログにエラーが表示されない場合は、PHP がこれらすべてを処理し、奇妙な応答をクライアントに返したことを意味します。
適切な PHP ログを有効にして、それが何を実行しているかを調査します。
応答のこの部分は、次のことを示しています。
転送エンコーディング: チャンク
つまり、PHPはレスポンスを(text/html)ストリームで送信しており、コンテンツサイズが定義されていませんヘッダーに。
これにより、ヘッダー出力 (PHP が頻繁にキャッシュするもの、つまり順序どおりに生成されないもの) が少しでもずれて、クライアントが新しいページが送信されていると誤解する可能性があります。
これは考えられる理由の 1 つにすぎません。適切な PHP ログ記録により、さらに多くのことがわかります。
答え2
理由を知るには、サーバーを見るのではなく、ページ コードをデバッグする必要があります。投稿内容から、FrontPage を使用して作成されたことがわかります (本当に、プロがそれを使用したのでしょうか?)。そのため、Microsoft 以外のプラットフォームでは正しく動作しないコードが必然的に含まれています。Microsoft 固有のコードをすべて削除してコードを修正すると、正しく実行される可能性があります。