PHP 脚本长度超过最大执行时间(进度条)


php script longer than max execution time (progress bar)

我目前从事一个小项目,其中一些数据是从网络上收集的,系统在这些数据之间建立了一些关系。当然,它从一开始就并不完美,所以我需要制作一个脚本来更新与我制作的更新脚本的所有连接和关系。

基本上脚本可以工作,但是由于之后应该有一个漂亮的后端,所以它并不是我真正想要的。

该脚本需要大约 10 分钟,因为我不仅想从 php 设置max_execution_time,我想到了另一种方法。我没有一次加载 1000 个 sql 条目,而是一次将其剥离到 200 个,然后在第一轮结束时重复下一个 200 个条目。因此,我使用了php http_request。我只是给你看一个精简版的脚本:

require_once 'HTTP/Request.php'; 
$max = $db->query("SELECT COUNT(id) as max FROM db_table");
$lower = $_POST['lower'] ? $_POST['lower'] : 0;
$plus = 250;
$entries = $db->query("SELECT * FROM db_table LIMIT {$lower},{$plus}");
foreach($entries as $entry){
  DO SOME STUFF TO UPDATE THE RELATIONS BETWEEN THE DATA
}
$lower = $lower + $plus;
if($lower <= $max) {
  $request = new HTTP_Request("path to the script"); 
  $request->setMethod(HTTP_REQUEST_METHOD_POST); 
  $request->addPostData("lower", $lower);
  $result = $request->sendRequest(); 
}

就是这样。正如我所说,它有效,因为它是一个新请求,因此不受max_execution_time的影响。但是浏览器只是加载,加载和加载,一段时间后它就完成了。但是,当然,我无法显示进度条之类的任何刷新数据。

我看到很多使用 php flush() 的条目,但这对我不起作用,因为我用来解决问题的(我猜)愚蠢的方式。如果您需要在网络空间上安装某些内容并且您没有能力更改最大执行时间或安装http_request,您将如何做到这一点?

正如我所说,它稍后应该看起来像一个进度条。我想我必须使用 ajax,只需在每一轮都推动脚本,并通过 javascript 更新进度条。

你可以帮我吗?

您仍然无法max_execution_time,因为您从Web浏览器请求的页面始终处于活动状态,直到HTTPRequests完成它才会完成。尝试将页面定位到另一个参数较低的页面。

header("Location: myscript.php?lower=$lower");