Евгений Степанищев

Эксперт в области разработки веб-приложений и безопасности в интернете. Каждый месяц мой блог посещают около 90 тысяч человек. Работаю техническим директором в «Системах документооборота», занимаюсь электронным правительством.

PHP SOAP

Что-то одно PHP SOAP или Perl SOAP::Lite — делала ключница. Простая задача: общаются две программы, клиент на PHP, используется модуль SOAP и сервер на Perl, используется SOAP::Lite.

В режиме XML-RPC Perl отвечает «Неверная версия» (SOAP::Lite поддерживает только 1.1), попытки установить версию со стороны PHP (есть специальные константы SOAP_1_1 и SOAP_1_2) ни к чему не приводят, в режиме document ещё хуже — PHP начинает плеваться совершенно невразумительными сообщениями об ошибках из разряда «моя нога кефир валяться», т.е. все слова знакомые, но что бы это значило… Мануал ничего не проясняет, интернет молчит, примеры из руководства не работают. Шаманскими плясками (например, я нашёл в исходниках параметр soap_action) удалось заставить PHP замолчать, но тут уже возмущается Perl — говорит, что доступ к методу запрещён.

Есть ещё nuSOAP (написанный на чистом PHP), но этот монстр занимает более полуметра. В общем, выкинул всё, взял cURL и SimpleXML. Сам запрос — 40 строк, ещё примерно столько же — разбор ответа через SimpleXML, меньше сотни строк. Так и живём.
23 июня 2008 13:57

gaius-julius.livejournal.com (gaius-julius.livejournal.com)
23 июня 2008, 14:31

если в итоге получилось на голом курле+хмл, то зачем изначально было брать навороченный соап? Есть же, например, XML-RPC.

Правда, в большинство его реализаций на php внутрь тоже лучше не заглядывать (для сохранения душевного равновесия)

bolk (bolknote.ru)
23 июня 2008, 15:30, ответ предназначен gaius-julius.livejournal.com:

Из «голого Curl+XML» я как раз SOAP и сделал. SOAP — XML-протокол поверх HTTP (в нашем случае — HTTPS с сертификатом).

Артём Курапов (kurapov.name)
23 июня 2008, 16:22

'trace' => 1 с отслеживанием xml ответов не помогает?

bolk (bolknote.ru)
23 июня 2008, 16:27, ответ предназначен Артём Курапов (kurapov.name):

Включено, без этого вообще труба была бы. Не помогает.

melash.livejournal.com (melash.livejournal.com)
23 июня 2008, 17:07

Вот тут пример работы SOAP между perl и php:
http://sonettic.com.ua/max/perl-php-soap.htm

Выложил специально, как-то не получилось сюда написать.

bolk (bolknote.ru)
23 июня 2008, 18:18, ответ предназначен melash.livejournal.com:

Perl-скрипт делают другие люди.

Сейчас мы договорились вообще убрать SOAP, используем REST + WDDX.

gaius-julius.livejournal.com (gaius-julius.livejournal.com)
24 июня 2008, 10:31

весь soap в 100 строк пхп? круто.

bolk (bolknote.ru)
24 июня 2008, 12:27, ответ предназначен gaius-julius.livejournal.com:

Он не весь, сильно упрощён, нам же под конкретные задачи.

gaius-julius.livejournal.com (gaius-julius.livejournal.com)
24 июня 2008, 18:09, ответ предназначен bolk (bolknote.ru):

а, ну под конкретные-то ладно.

norguhtar.livejournal.com (norguhtar.livejournal.com)
1 июня 2009, 09:57

Как выяснилось PHP SOAP делала ключница :)

Для того чтобы SOAP::Lite заработал надо добавить перед вызовом методов с сервера, выставить префиксы которые понимает PHP SOAP:
$service->envprefix('SOAP-ENV');

После чего эта зараза таки начинает работать.

melloist.ya.ru (melloist.ya.ru)
26 июня 2009, 15:18

Для того чтобы SOAP::Lite заработал надо добавить перед вызовом методов с сервера, выставить префиксы которые понимает PHP SOAP:
$service->envprefix('SOAP-ENV');

Вот за это огромнейшее спасибо! (почти со слезами на глазах)
Три дня головой об стену бился гадая почему не работает ничего :)

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)

Подсказка по написанию комментария

В комментариях можно применять следующую специальную разметку:

  • слово, обрамлённое в «звёздочки» выделяется *жирным*
  • ссылка становится ссылкой: http://bolknote.ru
  • ссылка в скобках также становится ссылкой, закрывающая скобка не захватывается: (http://bolknote.ru)
  • каждую строку цитаты следует начинать со знака «больше»:
    > это цитата
    > из двух строк
  • можно вставить картинку, залитую на один из сервисов: «Яндекс.Фотки», «Фликр» или «Пикплз». Для этого нужно вставить на страницу полный адрес вашей картинки на сервисе, он превратится в картинку:

    http://fotki.yandex.ru/users/bolknote/view/274311?page=3