1

AJAX を介して PHP 関数を呼び出す JavaScript 関数があります。PHP 関数には、set_time_limit(0)その目的のための があります。HTMLボタンイベントなど、必要なときにその機能を停止する方法はありますか?


状況をよりよく説明したい: stream_copy_to_stream($src, $dest) php 関数を使用してローカルネットワークのストリームを取得する php ファイルがあります。この機能は、私が望むまで機能する必要があります。ストリームの最後または必要なときに停止できます。そのため、ボタンを使用して開始し、ボタンを停止することができます。問題は、ajax 呼び出しによって作成された新しいインスタンスです。実際、記録している関数ではなく、別のインスタンスであるため、作業できません。MireSVK の提案を試してみましたが、うまくいきません!

4

4 に答える 4

0

機能次第。毎回特定の条件をチェックするwhileループの場合、スクリプトの外部から変更可能な条件を追加できます(たとえば、ファイルをチェックし、必要に応じてそのファイルを作成/削除します)

しかし、それは悪い考えのように見えます。なぜやりたいのですか?

于 2012-08-27T15:47:34.370 に答える
0

コードは次のようになります。

set_time_limit(0);

while(true==true){//infinite loop

 doSomething(); //your code

}

アップグレードしましょう

set_time_limit(0);

session_start();
$_SESSION['do_a_loop'] = true;

function should_i_stop_loop(){

   @session_start(); 

   if( $_SESSION['do_a_loop'] == false ) {

    //let's stop a loop
    exit();

   }

   session_write_close(); 

}

while(true==true){

 doSomething();

 should_i_stop_loop(); //your new function

}

新しいファイル stopit.php を作成します

session_start();
$_SESSION['do_a_loop'] = false;

あとは、stopit.php ファイル (ajax などを使用) でリクエストを作成するだけです。

必要に応じてコードを編集します。これがポイントです。多くのソリューションの 1 つ。

私の英語でごめんなさい

于 2012-08-27T16:03:00.920 に答える
0

残念ながら、これは不可能です (一種の)。

PHP スクリプトに対して AJAX 呼び出しを行うたびに、スクリプトはそれ自体の新しいインスタンスを生成します。したがって、送信したものはすべて、以前に開始した操作ではなく、新しい操作に送信されます。

いくつかの回避策があります。

  • AJAX で readystate 3 を使用して、PHP スクリプトへの閉じていない接続を作成しますが、これはクロス ブラウザーではサポートされておらず、おそらく IE では機能しません (IE 10 についてはわかりません)。

  • PHP でのソケット プログラミングを調べてください。これにより、複数回接続できる 1 つのインスタンスでスクリプトを作成できます。

  • PHP をサード パーティにチェックしてもらいます。IE では、ファイルまたはデータベースをチェックするループ内で 1 つのスクリプトを実行してから、別のスクリプトに接続してそのファイルまたはデータベースを変更します。元のスクリプトは、ファイル/データベースに書き込む内容によってリモートで制御できます。

  • 別のプログラミング言語を試してみてください (これはばかげたオプションですが、私はノードのファンです)。Node.js は、この種のことを非常に簡単に実行します。

于 2012-08-27T16:08:40.290 に答える
0
var running = true;

function doSomething(){

       //do something........
}

setInterval(function(){if(running){doSomething()}},2000); ///this runs do something every 2 seconds

ボタンをクリックすると、単純に設定されrunning = falseます。

于 2012-08-27T15:54:48.887 に答える