我的 php 脚本使用 php simplehtmldom 来解析 html 并获取我想要的所有链接和图像,这可以运行一段时间,具体取决于要下载的图像数量。
我认为在这种情况下允许取消是个好主意。目前我使用 Jquery-Ajax 调用我的 php,我能找到的最接近的是 php register_shutdown_function 但不确定它是否适用于我的情况。有任何想法吗?
那么php一旦启动就不能被打扰了?像再次触发 ajax 来调用同一个 php 文件的退出?
这仅在您通过 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 Table、MEMCACHE - 非持久缓存服务器或任何您能找到的非持久存储。