1

我试图强制 PHP 永远不要尝试在设定的时间段内连接和发送信息到 web 服务。我在下面使用,由于某种原因,它会在允许的时间内运行,我不知道为什么。例如,如果我将其设置为 30 秒,我会发现在某些情况下需要更长的时间。如果需要太长时间,我需要找到一种 100% 终止连接的方法。

TIA,威尔

    $intTimeout = $this->getTimeout();
        $client = new SoapClient("{$this->url}?WSDL", array('trace' => 0, 'connection_timeout'=>$intTimeout));
        尝试 {
            $this->response = $client->someService($objPerson);
        }
        捕获(异常 $e){

        }
        $this->restoreTimeout();
    函数getTimeout()
    {
        $intTimeout = @$this->timeout ?$this->timeout : 60;
        $_SESSION['old_sock'] = ini_get('default_socket_timeout');
        ini_set('default_socket_timeout', $intTimeout);

        返回 $intTimeout;
    }

    函数恢复超时()
    {
        $intCurSockTime = @$_SESSION['old_sock'];
        if($intCurSockTime) ini_set('default_socket_timeout', $intCurSockTime);
    }
4

1 回答 1

0

问题是:default_socket_timeout 在套接字响应之前计数,只要它得到响应,它将永远等待。

这是一个很好的例子,使用带有超时的 curl 作为后备:http ://www.darqbyte.com/2009/10/21/timing-out-php-soap-calls/

类似的问题:PHP SoapClient Timeout

于 2014-07-03T11:43:56.420 回答