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 - 非持久缓存服务器或任何您能找到的非持久存储。

于 2012-04-11T22:13:58.167 回答