为每个MySQL行运行PHP脚本

时间:2014-04-13 16:20:53

标签: php mysql database cron jobs

我有一个包含40,000多行的数据库。我正在尝试为表中的每一行运行一个脚本:

$query = 'SELECT * FROM table';

$result = mysql_query($query);

while ($row = mysql_fetch_assoc($result)) {

//run PHP script here

}

脚本可能需要大约10秒才能完成每行,因为有些curl函数需要一些时间才能加载。

我的问题是如何在没有超时或浏览器速度慢的情况下为该表中的每一行运行脚本?我也想将脚本作为cron作业运行,但我不确定这是否可行?如果这看起来微不足道,那么这一切并不是新鲜事。

4 个答案:

答案 0 :(得分:0)

如果php没有在safemode中运行,您可以使用函数

set_time_limit(int)

此功能会在您每次调用时增加时间限制。所以你可以在你的while循环中调用该函数。如果这不起作用,请检查您的serverconfig。 Apache即具有其他超时设置。

查看http://www.php.net/manual/en/function.set-time-limit.php

答案 1 :(得分:0)

您可以为脚本设置最长的排除时间

ini_set(' max_execution_time','时间秒');

它会增加脚本的超时,你也应该使用 -

while($ row = mysql_fetch_array($ result)){}而不是 while($ row = mysql_fetch_assoc($ result)){}

答案 2 :(得分:0)

command line

运行脚本
$ php myneverendingscript.php

如果需要定期运行,请使用cron作业。

答案 3 :(得分:0)

如果您要加载40000多行,您可能遇到的问题可能与超时或可达到的最大允许内存有关,根据您的服务器配置,您可以执行以下操作:

如果您有权访问配置文件php.ini,则可以更改属性:

如果您无法访问php.ini并且未以安全模式运行,则可以尝试在脚本开头使用此命令:

  • ini_set('memory_limit','64M');
  • ini_set('max_execution_time ','0');set_time_limit(0);(0表示无限制,如果从命令行运行脚本,则0为默认值)

最后,如果您正在使用MySql,您可以考虑一次使用分页和处理X行,这将避免达到内存限制。 类似的东西:

SELECT * FROM tbl LIMIT 0,1000; # then increment by 1000 -> LIMIT 1000, 2000 etc..

关于使用cron作业,这很容易做到,请看一下PHP - good cronjob/crontab/cron tutorial or book