如何在PHP中控制脚本执行时间

时间:2010-06-04 06:10:37

标签: php

例如,我在页面上有5个PHP函数,在加载时执行。每个函数都有自己的处理时间,有些函数有时需要更多时间才能完成任务。因此,所述页面的总加载时间很慢。

我的问题是如何控制每个脚本的执行时间并设置相同的时间限制。我知道在PHP中有一个内置函数,名为set_time_limit();,但如果时间超出最大限制,则会产生致命错误...

2 个答案:

答案 0 :(得分:1)

根据你的问题所说,我假设你在一个PHP文件(脚本)中有5个函数,正在执行,如果其中一个执行的时间太长,就应该跳过它。

您可以跳过功能的唯一方法是每隔一段时间轮询一次。

function myFunction($someVar) {
    $startTime = time();
    $timeLimit = 10; // Let's say, time limit is 10 seconds
    while ($blah_blah == true) { // Some loop or code that takes a long time
        // Do some work
        if (time() - $startTime > $timeLimit) return; // Time's up!
    }
    // Done
    return;
}

请注意,该功能只会在检查时间是否到位的位置返回,并且您必须手动将点放在检查时间是否到位的位置。这项检查确实有一些开销,所以尽量不要把它放在任何地方。

如果我误解了您的问题,请发表评论。

答案 1 :(得分:1)

简单的方法是拨打set_time_limit(0);,但只有在safe_mode关闭时才有效。


我的方法是使用register_shutdown_function

function one() {
    register_shutdown_function('two');
    /* do stuff */
}

function two() {
    register_shutdown_function('three');
    /* do stuff */
}

function three() {
    /* do stuff */
}

one();

这似乎不适用于PHP 5.3.1,我想这是因为PHP 4.1.0中实现的更改:

  

现在调用关机功能   作为请求的一部分。在早些时候   Apache下的版本,已注册   关闭函数后调用   请求已经完成。

替代方案可以是使用pcntl_fork,也可以发出另一个请求(例如file_get_contents),并在请求的脚本上调用ignore_user_abort