CodeIgniterに基づいて、solrインデックスサーバーで動作するphpのWebサイトがあります。
大量の新しいコンテンツを取得したため、データベースをフラッシュし、コンテンツのインデックスを再作成する必要がありました(約168,000の要素)。 500個のスライスでコンテンツのインデックスを作成するスクリプトを作成しました。スクリプトが終了したら、次のインデックス作成を開始します。
ローカルテスト環境では完全に機能しますが、実稼働環境ではこの500エラーが発生します。
[Thu Dec 02 ...] [error] [client IP] Premature end of script headers: index.php
私のphp.logには絶対に何もありません。それを返すApache error_logだけです。私はそれがウェブサイトの他のページで一度か二度起こるのを見たことがありますが、それはこのインデックス作成中でした。
何か案は?
通常、このエラーは FcgidIOTimeout
ディレクティブ (旧名:IPCCommTimeout
)のFastCGIセットアップが原因で発生することがあります。
これはIO timeoutの秒数です。デフォルトは40秒です。タイムアウトは
"FastCGIアプリケーションは、この期間内に応答の生成を開始する必要があります。応答に比較的長い時間がかかるアプリケーションを処理するために、必要に応じてこのディレクティブを増やします。"
これをvhost.confに入れて解決しようとすることができます:
<IfModule mod_fcgid.c>
# 5 minutes for IO timeout, default is 40 seconds
FcgidIOTimeout 300
</IfModule>
必要に応じて値を増やし、インデックスの再作成プロセスが完了したら元の値に戻すことができます。
Liquid WebのKBには可能性についての良いリストがあります。
PHPの異なるバージョンにアップグレードまたはダウングレードすると、httpd.confに残りのオプションが残る場合があります。コマンドでphp -vを使用して、PHP httpd.confで別のバージョンに言及している行を探し、それらをコメントアウトし、httpd.confを抽出してApacheを再起動します。
リソース制限のためにスクリプトが強制終了された場合、httpd.confのRLimitCPUおよびRLimitMEMディレクティブもエラーの原因になります。
SuEXEC、mod_Perl、または別のサードパーティモジュールの構成の問題は、多くの場合、スクリプトの実行を妨げ、エラーを引き起こす可能性があります。これらが原因である場合、詳細に関連する追加情報はApache error_logにあります。
Suphpのログが2GB以上のサイズに達すると、スクリプトヘッダーエラーの早期終了エラーが表示される場合があります。ログの内容を確認し、gzipまたはnullにします。 Apacheを再起動し、suphpログが明らかにした問題を処理します。 suphpログは次の場所にあります:/ usr/local/Apache/logs/suphp_log
スクリプトの権限によってもこのエラーが発生する場合があります。 CGIスクリプトは、httpd.confで指定されたユーザーとグループに許可されているリソースにのみアクセスできます。この場合、エラーは、許可されていないユーザーがスクリプトにアクセスしようとしていることを単に示している可能性があります。
http://www.liquidweb.com/kb/Apache-error-premature-end-of-script-headers/
同じ状況にあった場合は、最初に権限を確認してから3と4に進みます。
また、ウェブサイトを読み込もうとした500内部サーバーエラーの後、etc/httpd/logs/error_logでこのエラーメッセージを受信していました。
私にとって、解決策は許可でした-ファイルをchmod 755しなければなりませんでした。サーバー上のサイトを「ロード」しているユーザーよりも高いアクセスレベルのユーザーとしてファイルを作成しました。
また、PHP APC Extensionを間違った方法で使用しているため、最初にapc.soをphp.iniから削除し、Apacheを再起動して再度テストしてください:)
この問題が発生し、5時間以上苦労した後、xcacheを無効にすると、すべてが正常に戻り、エラーが消えました!
PHPのerror_levelは何ですか?ログ内に表示されるエラーメッセージは、多くの場合、単純なPHPエラーの結果ですが、セキュリティ上の理由でクライアントにエラーメッセージを配信しないようにサーバーがセットアップされています。これにより、メッセージはあまり役に立たず、すべての可能性があります。