2012-04-11 9 views
1

私のPHPスクリプトは、PHPのsimplehtmldomを使ってHTMLを解析し、必要なすべてのリンクと画像を取得します。ダウンロードする画像の量に応じてこの時間を実行できます。PHP:POST/AJAXを使用して実行中のスクリプトをキャンセルしますか?

この場合、キャンセルを許可することをお勧めします。現在、私はJquery-Ajaxを使ってPHPを呼び出していますが、私が見つけた最も近いのはPHPのregister_shutdown_functionですが、私の場合はうまくいくかどうかわかりません。何か案は?

phpが起動したら、それは妨げられませんか?もう一度同じafpファイルへの出口を呼び出すために火災アヤックスのような?

答えて

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); 

これは間違いなく影響を与えますスクリプトのパフォーマンスは向上しますが、実行を終了させるバックドアになります。これは非常に単純な例です - 非永続キャッシュサーバまたは任意の非 - あなたはそれが同時により多くのユーザーのために動作させるために、それをより複雑にする必要がある、など

また、MEMCACHEをMySQLのメモリテーブルを使用することができますあなたが見つけることができる - 永続的なストレージ。

関連する問題