Intereting Posts
Есть ли функция PHP для удаления всех / всех пар ключ / значение, которые имеют определенное значение из массива? Отправить форму (jquery) и показать результаты в colorbox Как я могу использовать подготовленные сообщения в CodeIgniter Динамическое перемещение массива в PHP Создание PDF. Как я могу заставить это работать? Ошибки, населяющие Какова рекомендуемая практика для API-интерфейса PayPal NVP с остановкой и возвратом подписки? PHP $ _GET и .htaccess переписать Отправка форм HTML5 по электронной почте (через php?) Кодирование строки как UTF-8 с спецификацией в PHP PHP – Как работает сериализация / несериализация объекта? Показывать сообщения из нескольких фидов с помощью JSON Маршруты Laravel-4 с параметрами вызываются дважды PHP: самый простой способ получить дату месяца за 6 месяцев до первого? Предотвращение двойного голосования PHP, SOAP, .NET – ссылка на объект не установлена ​​в экземпляр объекта

Исключение SoapFault: Ошибка Получение заголовков HTTP

Я получаю следующее исключение на моей php-странице.

Исключение SoapFault: [HTTP] Ошибка Получение заголовков HTTP

Я прочитал пару статей и обнаружил, что default_socket_timeout нуждается в настройке. поэтому я установил его следующим образом. default_socket_timeout = 480

Я все еще получаю такую ​​же ошибку. Кто-нибудь может мне помочь?

Я получаю Error fetching http headers получая Error fetching http headers по двум причинам:

  1. Сервер занимает много времени, чтобы ответить.
  2. Сервер не поддерживает соединения Keep-Alive (на которые распространяется мой ответ).

PHP всегда будет пытаться использовать постоянное соединение с веб-службой, отправив HTTP-заголовок Connection: Keep-Alive . Если сервер всегда закрывает соединение и не сделал этого (PHP не получил EOF ), вы можете получить сообщение об Error fetching http headers когда PHP пытается повторно использовать соединение, которое уже закрыто на стороне сервера.

Примечание: этот сценарий произойдет только в том случае, если один и тот же объект SoapClient отправляет более одного запроса и с высокой частотой. Отправка Connection: close HTTP-заголовок вместе с первым запросом, это было бы исправлено.

В PHP версии 5.3.5 (в настоящее время поставляется с Ubuntu) настройка HTTP-заголовка Connection: Close не поддерживается SoapClient. Нужно иметь возможность отправлять HTTP-заголовок в контексте потока (используя $option – key stream_context как аргумент SoapClient ), но SoapClient не поддерживает изменение заголовка Connection ( Update: эта ошибка была решена в PHP версии 5.3.11 ).

Другое решение – реализовать свой собственный __doRequest() . В приведенной ссылке парень использует Curl для отправки запроса. Это сделает ваше приложение PHP зависимым от Curl . В реализации также отсутствуют такие функции, как сохранение заголовков запросов / ответов.

Третьим решением является просто закрыть соединение сразу после получения ответа. Это можно сделать, установив атрибут httpsocket в NULL в __doRequest() , __call() или __soapCall() . Пример с __call() :

 class MySoapClient extends SoapClient { function __call ($function_name , $arguments) { $response = parent::__call ($function_name , $arguments); $this->httpsocket = NULL; return $response; } } 

У меня была такая же проблема, и я попробовал следующее, отключив keep_alive .

 $api_proxy = new SoapClient($api_url, array('trace' => true, 'keep_alive' => false)); 

Однако это не сработало для меня. То, что работало для меня, было отключением кэша SOAP. Похоже, что кеширование неверных запросов и после отключения я фактически заметил, что мои запросы выполнялись быстрее.

На сервере linux вы можете найти это в файле /etc/php.ini .

Найдите soap.wsdl_cache_enabled=1 и измените его на soap.wsdl_cache_enabled=0 .

Не забудьте перезагрузить apache. service httpd reload

Один из моих процессов в веб-сервисе занимал много времени. Поэтому я получал выпадение мыльных пузырей.