У меня есть простой php скрипт с включенным следующим кодом:
$options = array(
'uri'=>'http://schemas.xmlsoap.org/wsdl/soap/',
'style'=>SOAP_RPC,
'use'=>SOAP_ENCODED,
'soap_version'=>SOAP_1_1,
'cache_wsdl'=>WSDL_CACHE_NONE,
'connection_timeout'=>15,
'trace'=>true,
'encoding'=>'UTF-8',
'exceptions'=>true
);
$client = new SoapClient($wsdl,$options);
Когда я выполняю код через php -cli (CentOS 8), все работает как чудо. Я могу успешно подключаться к веб-сервису и вызывать методы, обрабатывать ответы и т.д. c.
Когда я пытаюсь выполнить скрипт через браузер, я получаю сообщение об ошибке:
Неустранимая ошибка: Uncaught Исключение SoapFault: [WSDL] SOAP -ERROR: Синтаксический анализ WSDL: Couldn 't load from' http://xxx/services/Assets?wsdl ': не удалось загрузить внешний объект "http://xxx/services/Assets?wsdl" в / var / www/html/xxx.php: 32 Трассировка стека: # 0 / var / www/html/xxx.php (32): SoapClient-> SoapClient ('http://xxx ....', Array) # 1 {main} добавляется в / var / www/html/xxx.php в строке 32
Поскольку php выполняется на стороне сервера В чем разница между запуском сценария непосредственно на сервере через php -cli и косвенным запуском сценария с удаленного хоста через браузер? PHP выполняется на веб-сервере, поэтому это не должно быть проблемой брандмауэра / сети ... верно?
Сервер веб-службы, к которому я пытаюсь подключиться, находится на другом хосте, чем мой CentOS с apache / php, но между ними нет брандмауэра / acl. Маршрут настроен правильно (как я уже сказал, с php -cli все отлично работает)