2011-12-29 19 views
0

私はいくつかの仕事を1〜2分間行ういくつかのPHPスクリプトupdater.phpを持っています。スクリプトジョブを終了することは重要です。php cron replacement

私はcronで実行できますが、私はいくつか考えています。

スクリプトは、ユーザーがホームページなどを取得した場合にのみ具体的な時間を実行します。この場合、毎回必要なときにのみスクリプトを実行する必要はありません。だから、

、ユーザー負荷http://localhost/index.phpは、スクリプトのポスト小さなGETリクエストをJS:

$.get('/json/updater.php', function(data){ return true; }); 

の要求は、1〜2分で良い進めます。

質問:ブラウザでタブを閉じて、$ .get要求を破棄すれば、updater.phpの処理が停止しますか? (:http://php.net/manual/en/function.set-time-limit.php最大構成された時間参照を超えていない実行時間を想定し)あなたがブラウザウィンドウを閉じた場合

答えて

4

リクエストはキャンセルされませんので、PHPは、単にスクリプトを完了することができるようになります。もちろん、JavaScriptを使って行う作業は、ウィンドウを閉じると停止します。

+0

ああ!それは良いです!だから、それはcronの代わりになるかもしれませんか? –

+0

さて、毎回ブラウザを開く必要があります...しかし、あなたがやりたいことが無作為な時間にスクリプトを実行するのであれば、それは良い代替物です。 –

+1

@AlexanderKononenko:それはどんな意味でも「cron」の「置き換え」ではありません。 'cron'はまったく別のことをします。 'cron'はジョブを定期的に実行するようにスケジュールします。あなたがやっていることは、イベントに応じて仕事をしていることです。仕事が終わったら、それは素晴らしいことです。しかし、それは 'cron'に代わるものではありません。 – David

1

ユーザーがブラウザのタブを閉じて、$ .get要求を破棄すれば、updater.phpの処理が停止しますか?

リクエストが実際に送信される前にタブを閉じると、それはかなり速くなります。この場合、「停止」ではなく「開始したことはありません」。

クライアントからGET要求を受け取ると、要求自体が実行されます。サーバー上でプロセスを起動することはできますが、ブラウザはそのプロセスを制御できません。ブラウザは、クライアント側コードの実行を停止することができます。

逆に、別のリクエストでこれを行う理由は何ですか?ページがロードされたときにプロセスが生成されるようにするには、からindex.php以内にスポーンするのはなぜですか?

  • JavaScriptが無効になっている場合でもプロセスは実行されます。
  • JavaScriptコードがブラウザにロード/実行される前にユーザーがナビゲーションをキャンセルしても、プロセスは実行されます。
  • サーバーへの要求が1つしかないため、ネットワークオーバーヘッドがわずかに減ります。
+0

1.私のプロジェクトではjsが必要なので、私はajaxでこれを行うことができます。 –

+0

2. index.phpにジョブを追加しましたか?または必要なスクリプトの呼び出し? –

+0

@AlexanderKononenko:はい、index.phpのクライアント側のコードでコードを実行する代わりに、index.phpが読み込まれたときにコードを実行するだけです。そうすれば、1つの要求でしか発生しません。 – David

2

PHPスクリプトをコマンドラインまたはcronから直接実行することができます。PHPインタプリタのパスを使用してください。スケジュールされたジョブについては、一貫性の問題を引き起こす可能性があるため、必要な前提条件(JavaScript/Browser)を使用しないことをお勧めします。2分ごとに実行し、別のステップ(AJAXまたはブラウザ)を追加すると、矛盾する。

+0

私は理解しています。私はシェルへのアクセス権がありません(あるいは、私は2分ごとにスクリプトを実行する必要はありません、いくつかのデータ+ログスクリプトの開始時間を更新し、10分待つだけです) 10分以上経過した場合は更新し、サイトにユーザーがいない場合はサーバーに負荷がかかりません)。 –

+0

ほとんどのホスティングプロバイダは、CPannelまたは別のサーバ管理インターフェイスを介してcrontabにアクセスできるようにします。 操作をバックグラウンドで実行する必要がない場合(つまり、サイトでアクティブなユーザーがいない場合)、使用している方法を使用しても問題ありません。考慮する必要がありますブラウザ内のリクエストがタイムアウトしたり、サーバーに到達しなくなったりする可能性があります。 – Nabeel