我试图强迫PHP永远不要尝试连接并向Web服务发送信息 一段时间。我在下面使用,由于某种原因,它将在允许的时间内运行,我无法弄清楚为什么。例如,如果我将其设置为30秒,我会发现在某些情况下需要更长的时间。如果需要太长时间,我需要找出一种100%杀死连接的方法。
TIA, 将
$intTimeout = $this->getTimeout(); $client = new SoapClient("{$this->url}?WSDL", array('trace' => 0, 'connection_timeout'=>$intTimeout)); try { $this->response = $client->someService($objPerson); } catch(Exception $e) { } $this->restoreTimeout();
function getTimeout() { $intTimeout = @$this->timeout ? $this->timeout : 60; $_SESSION['old_sock'] = ini_get('default_socket_timeout'); ini_set('default_socket_timeout', $intTimeout); return $intTimeout; } function restoreTimeout() { $intCurSockTime = @$_SESSION['old_sock']; if($intCurSockTime) ini_set('default_socket_timeout', $intCurSockTime); }
答案 0 :(得分:0)
问题是:default_socket_timeout在socket响应之前计数,只要它得到响应,就会永远等待。
这是一个很好的例子,使用curl with timeout作为后备:http://www.darqbyte.com/2009/10/21/timing-out-php-soap-calls/
类似的问题:PHP SoapClient Timeout