限制PHP中可调用的执行时间

时间:2016-06-03 23:54:02

标签: php timeout callable

我需要一个函数,在可调用函数花了很长时间才能完成它的任务之后会抛出一个可捕获的异常。

  

注意:我不是指PHP脚本的最长执行时间。

该函数应该像call_user_func一样工作,除了可调用的时间限制为秒。

    function task() {
        // does a lot of work...
    }

    try {
       call_user_func('task', 30); // limit to 30 seconds
    } catch (TimeoutException $ex) {
        // ....
    }

我无法向task函数添加自定义逻辑以向其自身抛出异常。我们的想法是强制可调用的方法在X秒后中止或失败。

我有CLI脚本,我想要规定完成任务需要多长时间。

1 个答案:

答案 0 :(得分:0)

您可以使用EvTimer。但是,您必须安装Ev Package,因为它不是PHP的一部分。你可以用 pecl install ev

来做到这一点
    <?php

        function task(){
            // DOES A LOT OF WORK...
        }

        function runTaskWithin($seconds) {
            // SET UP A TIMER TO FIRE AFTER X-SECONDS
            $evT = new EvTimer($seconds, 0, function ($seconds) {
                throw(new Exception("{$seconds} Seconds has elapsed since Execution began... Better rest, Now."));
            });
        }

        // ONCE 30 SECONDS PASSES A NEW EXCEPTION WILL BE THROWN...
        // NON-BLOCKING... 
        try {
            runTaskWithin(30); //  LIMIT TO 30 SECONDS
        } catch (Exception $ex) {
            // ....
        }