Php 函数超时后输出消息

Php 函数超时后输出消息,php,opencart,3d-secure,Php,Opencart,3d Secure,我有一个函数,我需要超时并输出错误消息 我找到了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!"; } ...

我有一个函数,我需要超时并输出错误消息

我找到了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 ...

这是我能想到的最好的办法,但是不行。你有什么建议吗?

set\u time\u limit
限制脚本时间,脚本将在该时间段后结束,之后不会执行任何代码


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

通常,如果脚本超时,web服务器会停止脚本并返回错误,而您只有一点点机会自己处理它-通过定义

但您可以使用自己的一个简单函数,比如:

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

    return false;
}
现在,在您的代码中,您可以执行以下操作:

// 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;
    }
}

我猜sendHttp方法和$client是SDK的一部分?您很可能会发现它们只是cURL的包装,因此如果SDK没有提供修改方法,您可以在SDK代码本身中将
CURLOPT_CONNECTTIMEOUT
设置为12秒
// 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;
    }
}