【问题标题】:Output message after function timeout函数超时后输出消息
【发布时间】:2013-05-27 10:42:01
【问题描述】:

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

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

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

【问题讨论】:

  • 我猜 sendHttp 方法和 $client 是 SDK 的一部分?您很可能会发现它们只是 cURL 的包装器,因此如果 SDK 没有为您提供更改它的方法,您可以在 SDK 代码中将 CURLOPT_CONNECTTIMEOUT 设置为 12 秒

标签: php opencart 3d-secure


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-26
      • 2015-06-12
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      • 2011-01-24
      • 2013-12-12
      相关资源
      最近更新 更多