【问题标题】:Run PHP Script For Each MySQL Row为每个 MySQL 行运行 PHP 脚本
【发布时间】:2014-05-27 12:44:18
【问题描述】:

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

$query = 'SELECT * FROM table';

$result = mysql_query($query);

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

//run PHP script here

}

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

我的问题是如何才能最好地为该表中的每一行运行脚本而不会超时或在浏览器中变慢?我还想将脚本作为 cron 作业运行,但我不确定这是否可能?对这一切都很陌生,如果这看起来微不足道,请道歉。

【问题讨论】:

    标签: php mysql database cron jobs


    【解决方案1】:

    您可以将脚本的最大执行时间设置为

    ini_set('max_execution_time', '时间以秒为单位');

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

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

    【讨论】:

      【解决方案2】:

      如果php没有在安全模式下运行,可以使用该功能

      set_time_limit(int)
      

      这个函数每次调用都会增加时间限制。因此,您可以在 whileloop 中调用该函数。如果这不起作用,请检查您的 serverconfig。 Apache 即有额外的超时设置。

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

      【讨论】:

      • 谢谢。如果我设置了时间限制并运行脚本,我是否需要保持浏览器打开直到完成?有没有办法在没有客户端交互的情况下在服务器上运行脚本?
      • 如果您关闭浏览器,脚本将被中止。如果您有服务器访问权限,则可以从命令行 (php.net/manual/en/features.commandline.php) 运行它
      【解决方案3】:

      command line运行脚本:

      $ php myneverendingscript.php
      

      如果需要定期运行,也可以使用 cron 作业。

      【讨论】:

        【解决方案4】:

        如果您正在加载 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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-04-26
          • 2014-05-20
          • 2011-06-02
          • 2012-02-09
          • 2010-12-16
          • 1970-01-01
          • 1970-01-01
          • 2010-12-04
          相关资源
          最近更新 更多