【问题标题】:How to exceed max_execution_time in PHP如何在 PHP 中超过 max_execution_time
【发布时间】:2015-07-03 22:27:19
【问题描述】:

在 PHP 中,我想运行一个需要 2 分钟计算的脚本,但我的 max_execution_time 只有 30 秒。
我无法在 php.ini 中更改我的 max_execution_time 也无法调用 shell_exec

我已经完成了我能想到的所有优化。 有什么想法吗?

【问题讨论】:

    标签: php performance time


    【解决方案1】:

    你也可以在你的 .htaccess 文件中设置它

    将以下行添加到您的 .htaccess 文件中

    php_value max_execution_time 200 
    

    【讨论】:

    • 它在我的情况下不起作用(共享托管)但很好的尝试!
    • 看起来您的虚拟主机不支持 htaccess 或 mod_php 设置不正确。
    • 好的,我会再试一次,让你知道。你不认为这个共享托管找到了一种方法来忽略 .htaccess 中的 max_execution_time 吗?
    【解决方案2】:

    您拥有的“最佳”选项是将您的算法分成更小的部分。 每个部分应在 30 秒内执行以避免超时。 这里有一些想法。

    使用 CURL:

    • [脚本开始]调用run.php让计算20s。
    • 使用 ID 将其 stat 保存到数据库中
    • 进行 CURL 调用 run.php?resumeID=384 [脚本完成]
    • [Script Start] 检索统计数据并继续计算
    • 等等……

    使用 CRON 任务:

    • 每秒调用一次run.php。它将在您的数据库中选择一个任务,然后标记为“进行中”。 所以下次调用 run.php 时,它不会选择“正在进行的任务”
    • 计算 20 秒后,将脚本的统计信息保存在数据库中,并将“进行中”标志更改为 false。
    • 下一次调用 run.php 将选择任务并继续处理
    • 等等……

    【讨论】:

      【解决方案3】:

      使用喜欢

      ini_set('max_execution_time', 100);

      【讨论】:

      • 它没有用。对不起,我没有提到它,但我已经尝试过
      【解决方案4】:

      即使您无法更改 php.ini 文件本身,您也可以通过 PHP 代码使用 ini_set 更改选项。

      您也可以尝试在代码中调用set_time_limit,重置当前时间计数器(这在安全模式下不起作用)。

      如果不行,尝试将任务拆分成多个子任务并保存临时结果,这样你就可以多次执行任务,从而绕过时间限制。

      【讨论】:

      • 与其他评论相同,它在我的情况下不起作用。可能是因为我在共享托管(?)是的,看起来拆分任务是要走的路。
      猜你喜欢
      • 2011-08-06
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-03
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      相关资源
      最近更新 更多