Ответ 1
Попробуйте установить:
default_socket_timeout = 120
в вашем файле php.ini
.
Я пытаюсь создать соединение с мылом для веб-сервисов Magento, однако я получаю сообщение об ошибке при попытке создать экземпляр класса клиента soap. Я могу просматривать wsdl файл в firefox без проблем, и я могу посмотреть, как php делает запрос для wsdl в журналах apaches, но он все еще не работает. Nusoap может подключаться.
$proxy = new SoapClient('someaddress?wsdl');
Ошибка
<b>Fatal error</b>: Uncaught SoapFault exception: [HTTP] Error Fetching http headers in /home/sites/xxx/xxx_main/system/application/views/contentpage_templates/gift_service.php:29
Stack trace:
[internal function]: SoapClient->__doRequest('<?xml version="...', 'http://cornishw...', 'urn:Mage_Api_Mo...', 1, 0)
[internal function]: SoapClient->__call('call', Array)
/home/sites/xxx/xxx_main/system/application/views/contentpage_templates/gift_service.php(29): SoapClient->call(NULL, 'catalog_categor...', 5, 'giftshop')
/home/sites/xxx/xxx_main/system/application/libraries/MY_Loader.php(586): include('/home/sites/cor...')
/home/sites/xxx/xxx_main/system/application/libraries/MY_Loader.php(228): MY_Loader->_ci_load(Array, '')
/home/sites/xxx/xxx_main/system/application/modules/contentpage/controllers/contentpage.php(44): MY_Loader->view('contentpage_tem...', false, true)
[internal function]: Contentpage->index()
/home/sites/xxx in <b>/home/sites/xxx/xxx_main/system/application/views/contentpage_templates/gift_service.php</b> on line <b>29</b>
Спасибо
Попробуйте установить:
default_socket_timeout = 120
в вашем файле php.ini
.
Вы пытались добавить
'trace'=>1,
для параметров создания SoapClient, а затем:
var_dump($client->__getLastRequest());
var_dump($client->__getLastResponse());
чтобы узнать, что происходит?
Эта ошибка может появиться на клиенте, если на сервере возникла проблема. Например, если SOAP-сервер является PHP script с ошибкой синтаксического анализа, клиент будет терпеть неудачу с этим сообщением.
Если вы контролируете сервер, запустите свой Apache error_log на машине, на которой размещен SOAP-сервер. В CentOS вы найдете это в /var/log/httpd/error _log, поэтому команда:
tail -f/var/log/httpd/error_log
Теперь обновите клиент и посмотрите сообщение об ошибке. Будут показаны любые ошибки PHP с сервером script.
Надеюсь, что это поможет кому-то.
Я столкнулся с той же проблемой.
Я запускал его как CLI. Так что PHP всегда работал, и ему приходилось делать мыльный звонок снова и снова через некоторое время.
Ошибка, которую я сделал, это использовать одноэлементный шаблон для этого. Я думал, что использование синглтона вызовет повышение производительности, но я хочу, чтобы я получил
Error Fetching http headers in ...
Я исправил его, создав новый saop-объект для каждого вызова.
Я не о вашей конфигурации PHP, но до PHP 5.2.6 у PHP есть некоторые проблемы с клиентом SOAP:
Ошибка # 41983 - Ошибка получения заголовков http
Если это проблема, связанная с Magento, вы должны отключить автоматическое повторное индексирование, поскольку это может привести к таймауту сокета (или истечению срока его действия). Вы можете вернуть его обратно, как только script завершит выполнение своих задач. Увеличение времени ожидания по умолчанию в php.ini также является хорошей идеей.
В моем журнале ошибок apache я увидел:
[Tue Feb 16 14:55:02 2010] [notice] child pid 9985 exit signal File size limit exceeded (25)
Итак, я удалил все содержимое самого большого файла журнала 2.1GB/var/log/system.log. Теперь все работает.
В версии php существует проблема с версией менее 5.2.6. Возможно, вам потребуется обновить версию php.
Обновите свой php.ini с помощью
default_socket_timeout = 120
Вы можете создать свой собственный php.ini, если php установлен CGI вместо модуля Apache