Есть ли в любом случае для запроса SoapClient тайм–аут и выброс исключения. На данный момент я получаю тайм-аут ответа PHP Server, в моем случае 60 секунд. В основном я хочу, если в течение определенного времени не будет ответа от веб-службы, будет выбрано исключение, и я мог бы его поймать. Предупреждение за 60 секунд – это не то, что я хочу.
Посмотри на
если вам удобно, и ваша среда позволяет вам расширять классы.
 Он в основном расширяет класс SoapClient , заменяет HTTP-транспорт завихрением, который может обрабатывать таймауты: 
 class SoapClientTimeout extends SoapClient { private $timeout; public function __setTimeout($timeout) { if (!is_int($timeout) && !is_null($timeout)) { throw new Exception("Invalid timeout value"); } $this->timeout = $timeout; } public function __doRequest($request, $location, $action, $version, $one_way = FALSE) { if (!$this->timeout) { // Call via parent because we require no timeout $response = parent::__doRequest($request, $location, $action, $version, $one_way); } else { // Call via Curl and use the timeout $curl = curl_init($location); curl_setopt($curl, CURLOPT_VERBOSE, FALSE); curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($curl, CURLOPT_POST, TRUE); curl_setopt($curl, CURLOPT_POSTFIELDS, $request); curl_setopt($curl, CURLOPT_HEADER, FALSE); curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: text/xml")); curl_setopt($curl, CURLOPT_TIMEOUT, $this->timeout); $response = curl_exec($curl); if (curl_errno($curl)) { throw new Exception(curl_error($curl)); } curl_close($curl); } // Return? if (!$one_way) { return ($response); } } } 
В то время как Андрей привязался к достойному решению, у этого есть меньше кода, но он приходит к хорошему решению:
Пример кода:
 // // setting a connection timeout (fifteen seconds on the example) // $client = new SoapClient($wsdl, array("connection_timeout" => 15)); 
  И есть также контекст потока, если вам нужен более тонкий HTTP-контроль.  См. stream_context для new SoapClient() .  Под поверхностью SoapClient используется протокол HTTP и SSL. 
 ini_set("default_socket_timeout", 15); $client = new SoapClient($wsdl, array(......)); 
Параметр connection_timeout определяет тайм-аут в секундах для подключения к службе SOAP. Этот параметр не определяет тайм-аут для служб с медленными ответами. Чтобы ограничить время ожидания вызовов, чтобы завершить настройку default_socket_timeout, доступно.
Принятый ответ нарушит все функциональные возможности, которые предлагает SoapClient. Подобно настройке правильных заголовков содержимого, аутентификации и т. Д.
Это было бы лучшим решением проблемы
 class MySoapClient extends \SoapClient { private $timeout = 10; public function __construct($wsdl, array $options) { // Defines a timeout in seconds for the connection to the SOAP service. // This option does not define a timeout for services with slow responses. // To limit the time to wait for calls to finish the default_socket_timeout setting is available. if (!isset($options['connection_timeout'])) { $options['connection_timeout'] = $this->timeout; } parent::__construct($wsdl, $options); } public function setTimeout($timeout) { $this->timeout = $timeout; } public function __doRequest($request, $location, $action, $version, $one_way = 0) { $original = ini_get('default_socket_timeout'); ini_set('default_socket_timeout', $this->timeout); $response = parent::__doRequest($request, $location, $action, $version, $one_way); ini_set('default_socket_timeout', $original); return $response; } } 
Вы можете установить это через композитор: https://github.com/ideaconnect/idct-soap-client . Он работает как обычный SoapClient (deriative) + дает опции для установки количества попыток, соединений и тайм-аутов чтения.