如何自动化数据收集而不冻结10%

时间:2012-05-03 09:59:08

标签: php javascript mysql loops for-loop

我有什么:

(如果需要,请查看或触发localhost:http://pastebin.com/virLR7dF

(看一下展示我案例的图片:http://iv.pl/images/47143498348127804676.png

我有一个PHP脚本可以抓取给定的网站,并将数据提取为varibles:

$ID = "data"; //this is just an example
$name = "data";
$price = "data";
$image = "data";

脚本会将此数据放入MySQL数据库中。

有什么问题?

我可以使用for循环自动化它,这样我就可以一次获得更多数据。但是,如果我将它循环1,000,000次,我的脚本将在某个时刻冻结,并从开始(找到它破坏并从那一点开始)是有问题的。

PHP / JS如何实现:

1。收集10份数据

2. 停止并显示有关已收集数据的信息

3. 收集下一部分数据

4. 停止并向新显示的信息添加新信息

* 在下一部分收集后暂停PAUSE功能

* 在最后一部分收集后启动RESUME功能

2 个答案:

答案 0 :(得分:1)

输出缓冲可能在PHP中帮助您

尝试ob_start& ob_flush

  

ob_start 此功能将打开输出缓冲。输出时   缓冲是活动的,没有从脚本发送输出(除了   标题),而输出存储在内部缓冲区中。

     

ob_flush 此函数将发送输出缓冲区的内容(如果   任何)

答案 1 :(得分:0)

执行此操作时可能会出现一些问题。

1)在循环内部触发错误,脚本停止执行。

解决方案:将错误转换为可捕获的异常

2)你超过了时间限制。

解决方案:将时间限制设置为零

示例:

set_error_handler(function($errno, $errstr, $errfile, $errline) {
    if($errno != E_STRICT && $errno != E_DEPRECATED && $errno != E_NOTICE) {
      throw new Exception($errstr.' in '.$errfile.' on line '.$errline);
    }
    return false;
});

set_time_limit(0);

function my_loop_func() {
 // do what ever...
}

while(true) {
  try {
     my_loop_func();
  }
  catch(Exception $e) {
    // write some log message here might be good
  }
  sleep(10);
}