Не могу загрузить веб-сервис с SOAP в PHP, я получаю SOAP-ERROR - PullRequest
1 голос
/ 09 февраля 2012

У меня есть веб-сервис, доступ к которому я хочу получить через SOAP.Но я получаю SOAP-ОШИБКУ:

Exception caught: SOAP-ERROR: Parsing WSDL: Couldn´t load from 'http://127.0.0.1:9999/info?wsdl' : failed to load external entity "http://127.0.0.1:9999/info?wsdl"

Если я вручную введу URL http://127.0.0.1:9999/info?wsdl в браузере, я смогу увидеть сгенерированный файл XML.

Почему я не могу загрузить его с помощью SOAP?

Я загружаю URL с помощью SOAP в PHP следующим образом:

$ soap = new SoapClient ("http://127.0.0.1:9999/info?wsdl", array ("trace" => TRUE));

Что я пропустил?

РЕДАКТИРОВАТЬ Установка версии SOAP на 1.1 НЕ заставляет ее работать:

$soap = new SoapClient("http://127.0.0.1:9999/info?wsdl", array("trace" => TRUE, "soap_version" => SOAP_1_1));

РЕДАКТИРОВАТЬ 2: У меня это работает как на Windows, так и на Ubuntu, но не на CentOS 6. Что-то с CentOS 6 делает PHP: s SoapClient не работающим?Версия PHP, которую я использую на компьютере с CentOS 6, - 5.3.3 с (конечно) поддержкой PHP в PHP.

Ответы [ 4 ]

2 голосов
/ 16 февраля 2012

У меня такая же проблема. По сути, текущая версия SOAP-клиента не обрабатывает REMOTE wsdl (даже если удаленный сервер - "localhost") должным образом ... не знаю почему, перепробовал много способов работы не делает. Если вы загрузите копию wsdl и сохраните ее локально, используйте ее как:

$soap = new SoapClient("/path/to/local/file.wsdl");

Работает как шарм.

Если вам действительно нужен живой wsdl, вы можете выбрать:

  • Найдите старую версию NuSoap и используйте ее
  • Используйте что-то вроде библиотеки php curl, чтобы развернуть wsdl и сохранить его как локальный файл, а затем создать объект Soap Client из этого недавно сохраненного файла.

Удачи!

2 голосов
/ 16 февраля 2012

Спасибо за ваши ответы и идеи! Но мы нашли проблему. Это был материал в SELinux, который нужно было отключить (вы можете отредактировать /etc/sysconfig/selinux и отредактировать строку SELINUX=enforcing в SELINUX=permissive (или SELINUX=disabled, чтобы отключить SELinux).
В нашем случае мы имели запустить php-файлы, которые подключаются к WSDL от имени root (chown root /path/to/phpfile/on/webserver/file.php).

Эта проблема возникла только при использовании CentOS 6, а не при использовании Ubuntu и MS Windows.

Кроме того, взгляните на ссылку @ dar7yl: s: http://www.victorstanciu.ro/php-soapclient-port-bug-workaround/, если не можете решить проблему с изменениями в SELinux и запуском php-файла от имени пользователя root.

1 голос
/ 09 февраля 2012

Думаю, проблема в том, что библиотека PHP Soap не может обрабатывать WDSL версии 2. Возможно, вам придется искать сторонние библиотеки.

0 голосов
/ 06 марта 2013

Чтобы заставить его работать с применением SELinux.

Поскольку по умолчанию сценарии httpd не разрешают подключаться к сети, если вам необходимо подключить сценарии, вы можете установить логическое значение httpd_can_network_connect.

...