Задать вопрос
@kirill-93

В чем может быть проблема SOAP?

Здравствуйте, столкнулся с проблемой: при попытке соединения через SOAP появляется ошибка "looks like we got no XML document". Причем при запуске скрипта с локальной машины все в порядке. А на боевом серваке ошибка. Отсюда делаю вывод, что наверное что то с настройкой пхп. Проверил, весь раздел с SOAP в php.ini совпадает. Гуглил, почти все результаты сводятся что к тому что невалидный xml приходит. Кто с таким сталкивался? Может в php.ini еще какие то настройки могут на это влиять?
  • Вопрос задан
  • 2603 просмотра
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
FanatPHP
@FanatPHP
Чебуратор тега РНР
Похожий случай был в одном пионерском кружке:
Юные натуралисты посадили таракана на стол и постучали - таракан услышал и побежал.
Тогда пионеры оторвали таракану лапки и снова постучали по столу. Таракан остался на месте.
"Не слышит" - догадались юные исследователи, и сделали вывод из своей лабораторной работы: у таракана уши в ногах.


Умением делать выводы из наблюдаемых явлений пользователи похапе мне до боли напоминают тех юных натуралистов.

Чтобы им не уподобляться, надо свои умозаключения о причинах делать не на основании догадок и озарений, а на основе конкретных данных.
Если "что-то не работает", то надо подключать не воображение, а руки.
И не тыкать пальцем в небо, предполагая, что это "настройки", а выяснять - что конкретно не работает.

Сервер нам пишет, что проблема с документом. Это значит, что в первую очередь надо узнать, что мы получили. То есть, посмотреть глазками на этот самый документ.
Сделать это несложно - встроенный клиент предоставляет такую возможность:
<?php
$client = SoapClient("some.wsdl", array('trace' => 1));
$result = $client->SomeFunction();
echo "Ответ:\n" . $client->__getLastResponse() . "\n";

Здесь мы видим, что при создании клиента надо задать параметр trace, а при обработке ошибки добавить к ней $client->__getLastResponse().

И только после того как мы увидим результат, можно будет делать глубокомысленные выводы о причинах проблемы и возможных путях ее решения.
Ответ написан
KorsaR-ZN
@KorsaR-ZN
Добавьте в параметры инициализации SoapClient (при условии, что у Вас PHP 5.4+), следующую опцию:
keep_alive => false

Из-за постоянно висящих соединений некоторые SOAP серверы начинают присылать битый ответ.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы