1

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

基本上脚本可以工作,但是因为之后会有一个漂亮的后端,它并不是我真正想要的。

该脚本需要大约 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() 的条目,但这对我不起作用,因为(我猜)我用来解决问题的愚蠢方式。如果您需要在 webspace 上安装某些东西并且您没有可能更改最大执行时间或安装 http_request,您将如何执行此操作?

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

你能帮助我吗?

4

1 回答 1

0

您仍然遇到 max_execution_time 问题,因为您从 Web 浏览器请求的页面始终处于活动状态,直到 HTTPRequests 完成才完成。尝试使用参数 lower 将页面定位到另一个页面。

header("Location: myscript.php?lower=$lower");
于 2013-01-26T15:08:22.437 回答