これはあまりにも曖昧な質問かもしれませんが、私は不可解なサーバー エラーのトラブルシューティングを何時間も行っており、最も奇妙な問題に突き止めました。この時点で、誰かが似たようなことが起こったことがあるかどうか、または何が起こっている可能性があるかについての洞察を持っているかどうかを知りたいだけです.
次のコード行がエラーを引き起こしています。
if ($Name=='ProxiedIP') { return true; }
このバージョンはまったく問題なく動作します:
if ($Name=='proxiedIP') { return true; }
どういうわけかトークン「ProxiedIP」が何かを汚しているように見えますが、このようにサーバーをハングアップさせる方法で文字列リテラルがパーサーによってどのように変換されるかさえ考えられません。ところで、私は確かに$Name!='proxiedIP'と$Name!='ProxiedIP'を知っています。
Apache エラー ログのエントリは次のとおりです。
[Fri Jan 18 18:15:12.924419 2013] [core:error] [pid 27676:tid 3427232831232] [client 12.345.67.890:34482] Premature end of script headers: index.php, referer: http://mySite.com/
システムで考えられるすべてのコンポーネントのキーワードとして「ProxiedIP」を検索しましたが、何も思いつきません。ただし、私にとってより重要な質問は、文字列が比較チェックでこのような影響を与える方法です。何か案は?
また、PHP エラー ログがそれについて完全に沈黙していることも注目に値します。ページの上部でエラー出力を有効にしていますが、スクリプトの読み込みが完了しないため、それが原因である可能性があります。設定方法は次のとおりです。
error_reporting(E_ALL);
ini_set('display_errors', 1);
コードはここで機能したため、プラットフォームの実装に固有のものである可能性が高くなります。これは、アプリケーション アクセラレーションのために Varnish を実行する Gandi.net の「Simple Hosting」サービスのインスタンスで実行しています。コードが別のドメインの iframe に読み込まれていることにも言及する価値があるかもしれません。
私はまた、ヘッダーでいくつかの集中的な作業を行っています。これが問題の最大の潜在的な原因のようですが、私に関する限り奇妙なことは、エラーがトリガーされる方法です. また、私が認識している「ProxiedIP」と呼ばれる一般的なヘッダーはありません。とにかく、私はそれを見ません。
私にとって、関連性のある実際の項目は、文字列の比較がサーバーをクラッシュさせているという単なる事実です。私は 10 年以上 PHP でプログラミングを行っていますが、このようなことはこれまで一度もありませんでした。私は、それがどのように起こり得るかの背後にあるロジスティクスを理解しようとしています.
更新: 次のバリエーションを試しましたが、それでも同じ結果が得られます。
if ($Name === (strtoupper("p").'roxiedIP')) { return true; }
完全なコードを投稿するかどうか尋ねられましたが、iframe 側のスクリプトは 1400 行以上あるため、実際には実行できません。問題のセグメントを新しいスクリプトで実行するように調整していますが、結果を投稿します。