我有一个PHP脚本,重复同一组任务30次.我如何将它分解成一个接一个地运行以避免超时


I have a PHP script that repeats the same set of task 30 times. How do I break it into pieces that will run one after another to avoid a timeout?

我有一个PHP脚本,当我运行它时设置为获取30个RSS提要。

它抓取第一个提要,对单个文章进行中等到大量的处理,并将它们添加到mysql数据库中。然后它转向下一个饲料。每次向数据库中添加一篇文章时,脚本都会回显一条消息。

正如你所知道的,这个过程很长,我担心脚本超时。我宁愿不增加超时限制,而是使代码更具可伸缩性。另外,当脚本运行时,我没有看到任何视觉进展,直到最后。这在一定程度上修复了ob_flush(),但它仍然没有在每篇文章或每个提要之后输出确认。

一定有更好的方法来运行这个过程。我不知道该怎么做,所以我想不出很多好的搜索查询来学习这个。

目前我最好的想法是将更新过程分解为30个不同的文件,用于30个提要。然后使用AJAX(我不太熟悉)自动加载一个接一个。这会解决超时问题吗?

有没有更好的办法?

我将非常感谢任何和所有的帮助指出正确的方向!

假设您希望将任务分解,以便每个迭代运行3个RSS提要。您可以在与脚本相同的目录中放置一个.txt文件,并在每次迭代的开始和结束时对其进行读写。

例如,初始化.txt文件为0。当第一次迭代完成时,将.txt更新为3,以此类推,直到完成循环,此时可以让代码将文件重置为0。

你有很多方法可以解决这个问题。

解决方案1:假设总共有n个步骤需要遵循。通过querystring参数逐一执行,并返回一个元标记,以便在一秒钟左右重定向到步骤2,例如

switch($_GET["stepNo"])
case 1: performStep1(); break;
...

重定向

<META http-equiv="refresh" content="1;URL=http://example.com/?stepNo=5">

解决方案2:正如您所说的AJAX是一个不错的选择,即使这样,您也可以将其分解为多个步骤(甚至函数也可以工作),并在获得响应时逐个调用各个步骤过程。这里你的代码也会像上面一样