1

我有一个需要超时并输出错误消息的功能。

我找到了 set_time_limit() 函数,但我认为我没有正确使用它。

我努力了...

... some code ...

set_time_limit(12);

$client->sendHttp(URL, TIMEOUT_CONNECT, TIMEOUT_READ);

if (set_time_limit(12) != true){
    $_SESSION['Message'] = "Transaction Timed Out!";
}
... some code ...

这是我能想到的最好的方法,但它不起作用。你能提出什么建议吗?

4

2 回答 2

1

set_time_limit限制脚本时间,脚本将在这段时间后结束,之后不会执行任何代码

$client->sendHttp应该返回 false,如果达到超时,则返回 null,请阅读该函数的文档以查看它实际返回的内容。

于 2013-05-31T14:57:27.803 回答
1

通常,如果脚本超时,Web 服务器会停止它并返回错误,而您自己处理它的机会很小 - 通过定义关闭函数

但是您可以使用自己的简单功能,例如:

function check_timeout($start) {
    if(microtime() <= $start + MAX_EXECUTION_TIME)
        return true;

    return false;
}

MAX_EXECUTION_TIME常数将在某处定义,例如

define('MAX_EXECUTION_TIME', 10000); // 10 seconds

现在在您的代码中的某个地方您可以执行以下操作:

// some code...

$start = microtime();

foreach($array as $key => $value) {
    if(check_timeout($start)) {
        // do something
    } else {
        // set HTTP header, throw exception, etc.
        // return false; // die; // exit;
    }
}
于 2013-05-31T15:49:27.790 回答