1

私のphpスクリプトは、php simplehtmldomを使用してhtmlを解析し、必要なすべてのリンクと画像を取得します。これは、ダウンロードする画像の量に応じて一定時間実行できます。

この場合、キャンセルを許可することをお勧めします。現在、Jquery-Ajax を使用して php を呼び出しています。最も近いのは php register_shutdown_function ですが、私のケースで機能するかどうかはわかりません。何か案は?

では、一度 PHP を起動したら、それを邪魔することはできませんか? もう一度 ajax を起動して、同じ php ファイルへの出口を呼び出すようなものですか?

4

1 に答える 1

1

これは、AJAX を介して非常に大量のデータ ロードを処理している場合にのみ有効です。それ以外の場合は、キャンセルされた場合に結果を表示しないように JS で処理するだけです。

しかし、私が言ったように、膨大な量のデータを処理している場合は、スクリプトを実行する n ステップごとに割り込み条件を追加し、別のスクリプトを使用してその条件を満たすことができます。たとえば、ファイルを使用して割り込みデータや MySQL MEMORY テーブルを保存できます。

例。

1、process.php (データの負荷を処理する ajax スクリプト)

// clean up previous potential interrupt flag
$fileHandler = fopen('interrupt_condition.txt', 'w+');
fwrite($fileHandler, '0');
fclose($fileHandler);

function interrupt_check() {
   $interruptfile = file('interrupt_condition.txt');
   if (trim($interruptfile[0]) == "1") {    // read first line, trim it and parse value - if value == 1 interrupt script
      echo json_encode("interrupted" => 1);
      die();
   }
}

$i = 0;
foreach ($huge_load_of_data as $object) {
   $i++;
   if ($i % 10 == 0) { // check for interrupt condition every 10th record
      interrupt_check();
   }

   // your processing code
}
interrupt_check(); // check for last time (if something changed while processing the last 10 entries)

2、interrupt_process.php(キャンセルイベントをファイルに伝播するajaxスクリプト)

$fileHandler = fopen('interrupt_condition.txt', 'w+');
fwrite($fileHandler, '1');
fclose($fileHandler);

これは間違いなくスクリプトのパフォーマンスに影響しますが、実行を閉じるためのバックドアになります。これは非常に単純な例です。より多くのユーザーに対して同時に機能させるには、より複雑にする必要があります。

MySQL MEMORY TableMEMCACHE - Non-persistent Caching Serverなど、見つけられる非永続ストレージを使用することもできます。

于 2012-04-11T22:13:58.167 に答える