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

时间:2013-01-26 14:59:32

标签: php mysql execution-time

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

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

脚本需要大约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更新进度条。

你能帮助我吗?

1 个答案:

答案 0 :(得分:0)

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

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