我有一个PHP脚本,重复相同的任务集30次。如何将其分解为一个接一个地运行以避免超时?

时间:2014-03-23 04:56:10

标签: php ajax cron

我有一个PHP脚本,设置为在运行时获取30个RSS源。

它抓取第一个feed,对单个文章进行中等到大量的处理,并将它们添加到mysql数据库中。然后它继续前进到下一个Feed。每次将文章添加到数据库时,该脚本都会回显一条消息。

你可以说这个过程非常冗长,我害怕脚本超时。我宁愿不增加超时限制,而是使代码更具可扩展性。此外,当脚本运行时,直到最后我都看不到任何视觉进展。使用ob_flush()稍微解决了这个问题,但在每篇文章或每个Feed之后仍然没有输出确认。

必须有更好的方法来运行此过程。我对如何应对它几乎一无所知,所以我不能想到很多好的搜索查询来自己学习。

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

有更好的方法吗?

我非常感谢任何指向正确方向的帮助!

2 个答案:

答案 0 :(得分: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将是一个不错的选择,即使这样,你也可以将它分成多个步骤(甚至函数也可以工作),并在得到响应时逐个调用单个步骤。这里你的代码也就像上面一样。

答案 1 :(得分:0)

让我们假设您要完成任务,以便每次迭代运行3个RSS源。您可以将.txt文件放在与脚本相同的目录中,并在每次迭代的开始和结束时对其进行读/写。

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

然后你可以通过cron job调用脚本。