2012-04-19 14 views
2

私は、ブラウザ経由で呼び出されたときに、正確に60秒後にタイムアウトするPHPスクリプトを用意しています。 httpd.confを変更し、Timeoutディレクティブを300に設定しました。すべてのPHPタイムアウト設定を60秒以上延長するように変更しました。コマンドラインからスクリプトを実行すると、スクリプトは完了します。 60秒後に毎回ブラウザーを実行すると、POOF、タイムアウトになります。ApacheとPHPのタイムアウト - 困った。

また、.htaccessファイルのいずれかにタイムアウトディレクティブが存在するかどうかを確認しました。そこには何もない。私は完全に困惑している。

私はまた、PHPコード内でset_time_limit(0)を強制しています。

私は1週間掘り、テストしていて、自分の知識を使い果たしました。どんな助けでも大歓迎です。

+0

少し遅かったことに取り組んでいましたが、私のループでは、何かの理由でスクリプトが 'set_time_limit(0)'を再宣言しました。 – Blake

+0

両方のケースが全く同じphp.ini設定を使用していることを確認しましたか? – Hajo

+0

セーフモードを使用している場合、max_execution_time –

答えて

0

maxtimeを設定できる場所は数多くあります。 FastCGIを使用している場合(特にVirtualminなど)、アクセス権を持たない限り、あなたに隠されているmax_execution_timeの追加の設定があります。要するに

、あなたはPHPスタックのセットアップ与えられ、すべての場所を把握する必要がありますが、実行時間の制限があることができ、これらの値まで、サーバーを再起動し、ため

set_time_limit(0); 

を行います良い尺度。

具体的な設定についての詳しい情報がなく、PHPでの実行時間のハングアップを扱った経験があれば、それは私があなたに話すことができる最大のものです。

3

PHPとApacheの両方でタイムアウト制限を高く設定していることを確認する必要があります。

php.iniでmax_execution_timeを高く設定すると、スクリプトはタイムアウトしませんが、スクリプトの結果の出力バターを定期的にブラウザにフラッシュしないと、スクリプトがタイムアウトすることがありますApacheはネットワークタイムアウトのため終了します。 httpd.confの

が行います。php.iniで

Timeout 216000 

は行います

max_execution_time = 0 

(0に設定するには、それがタイムアウトすることがないです、CLI(コマンドライン)スクリプトと同じように)。

完了後にApacheを再起動してください。ほとんどのLinuxディストリビューションでは、(ルートとして)コマンドを発行することでこれを行うことができます:

service httpd restart 

これは役に立ちます。

+0

BTW、提案ではset_time_limit(0)あなたがPHP環境がセーフモードでない場合にのみ以下のように動作します。あなたはphpinfo()でスクリプトを実行することによってあなたのPHP変数をチェックすることができます。それにライン。 –

関連する問題