Разница в вызовах SoapClient между браузером и выполнением php -cli - PullRequest
0 голосов
/ 29 января 2020

У меня есть простой 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 все отлично работает)

1 Ответ

0 голосов
/ 30 января 2020

SE Linux, который вызывал проблему

setsebool -P httpd_can_network_connect 1

сделал волшебный c трюк! :)

Спасибо @ArSeN за хорошие указания !!

...