単純なクロールスクリプトを(phpで)localhostで(4つのバリエーションで)作成しました。それらはすべてlocalhostで正常に動作しました。しかし、私がそれらを共有ホスティングに移動させたとき、そのうちの2つは他のサーバーで機能し、内部サーバーエラーを発生させました。 error_logを見て、次の行を確認しました。
[Wed Jan 23 22:01:02 2013] [warn] [client ***] mod_fcgid: read data timeout in 61 seconds
[Wed Jan 23 22:01:02 2013] [error] [client ***] Premature end of script headers: index.php
検索を行ったが、有用な結果は見つからなかった。これらのエラーに関連するものは何ですか?何か案は?
Linuxサーバーにアクセスできる場合は、編集してください/etc/httpd/conf.d/fcgid.conf
vimのファイル。
変化する FcgidIOTimeout 45
からFcgidIOTimeout 600
。
Apacheを再起動します。
その後、高速CGIタイムアウトが解決されます。
仮想ホストを使用している場合(私の場合はispconfigです)、仮想ホスト構成ファイルを変更する必要があります。これらのファイルは/etc/httpd/conf/sites-available
各仮想ホスト。目的の構成ファイルを編集し、IPCCommTimeout
を見つけて、現在の値をより大きな数値に設定します。通常のサイトとSSLサイトがある場合は、同じ設定ファイルの両方の変数に対してこの変更を行う必要がある場合があります。
Drupal7がインストールされたMediaTemple Gridインスタンスでこの問題が発生しました。 FastCGIが原因であることがわかりました。通常の/安定したCGIに切り替えると問題が解決したようです。
61秒でデータのタイムアウトを読み取る
彼らはタイムアウトした。実行時間が60秒に設定されている可能性があります。そのため、61秒でプロセスが強制終了され、早期終了が発生しました。
タイムアウトを調整するか(非推奨)、別のソースからスクリプトを実行することができます(推奨)。
mod_cfgidは、PHPスクリプトの実行中に、PHPのmax_execution_time
以外の時間制限を導入します。最初に来るものが「勝ち」ます。
私の知る限り、mod_cfgidで考慮される時間制限の構成項目は多数ありますが、私はどちらがどちらを行うかを説明する専門家ではありませんが、少なくとも次の行を追加します。
IPCCommTimeout 9999
fcgid.conf
で、予期しないタイムアウトの問題を解決しました。
基本的に、スクリプトの実行時間がサーバー設定に対して長すぎる。 mod_fcgidはphpの応答を待っており、その設定は61秒後にあきらめるように設定されています。この共有ホスティングなので、変更できない場合があります。
これはとにかくブラウザ/ウェブサーバーを介して実行されるべきものではありません。コンソールスクリプトとして記述します。
増加 max_execution_time
値、つまり:
<?php
ini_set('max_execution_time', 300); # 5 minutes
...
以下のようにmod_fcgidに問題がある場合:_mod_fcgid:読み取りデータタイムアウト(XX秒)_mod_fcgid:プロセススロットを適用できません
これらの問題を優先的に修正してください:
_Increasing the memory limit of php (default 128M, up to 256, 384, ... then restart Apache anh check it again)
_Increasing the time out of FCGI, but not need if above is ok