3

おそらく完了までに約 3 時間かかる PHP スクリプトを作成しました。ブラウザから実行すると、約 45 分後に何もしなくなります。特定のWebアドレスをポーリングしてから、データベースにデータを保存するので、これを知っています。そのため、基本的にデータベースへのデータの配置を停止し、停止したという結論に至りました。ただし、ページをロードしているようにブラウザに表示されますが、終わりはありません。

エラーが発生していないので、おそらく何らかのタイムアウトです...しかし、それがどこで発生するかは謎であり、どうすれば発生を防ぐことができますか. 私の場合、CLI を使用できません。ブラウザ クライアントを使用してスクリプトを開始する必要があります。

私は入れてみました

set_time_limit(0);  

しかし、明らかな効果はありませんでした。タイムアウトの原因とその修正について何か提案はありますか?

4

5 に答える 5

5

これを試して:

set_time_limit(0); 
ignore_user_abort(true);
ini_set('max_execution_time', 0);
于 2013-04-29T12:20:01.243 に答える
3

ほとんどの Web ホストは、一定時間実行されるプロセスを強制終了します。これは、無限ループに対するフェイルセーフとして意図されています。

これについてホストに尋ねて、この特定のスクリプトに対して無効にする方法があるかどうかを確認してください。場合によっては、キラーが Cron タスクまたは SSH によって実行されるプロセスに適用されないことがあります。ただし、これはホストによって異なります。

于 2013-01-18T21:40:30.730 に答える
0

ブラウザがタイムアウトするかどうかはわかりませんが、ブラウザがタイムアウトしている可能性がありますが、ページにそれほど時間がかかることもありません.

提案: ループを実行していると仮定しています。ページをロードしてから、別のページへの ajax 呼び出しでループの各反復を実行し、前の反復が戻るまで次の反復を起動しません。

于 2013-01-18T21:41:19.537 に答える
0

PHP には、しばらくしてからプロセスを強制終了する設定があります。これは、共有サーバーでは特に重要です (1 つのプロセスがサーバー全体を遅くすることは望ましくありません)。

php.ini を (.htaccess 経由で) 変更できるかどうか、ホストに問い合わせる必要があります。特に max_execution_time 設定。

于 2013-01-18T21:42:59.050 に答える
0

セッションを使用している場合は、set_time_limit ではなく、'session.cookie_lifetime' を確認する必要があります。配列を使用している場合、配列サイズもいっぱいになる可能性があります。

スクリプトがタスクを処理する方法に関する詳細情報がなければ、特定するのは困難です。

于 2013-01-18T21:48:25.187 に答える