Отредактировано для перефразирования с новой информацией.
Я пытаюсь получить доступ к SOAP API через PHP. Приложение с API размещено в моей корпоративной сети, а WS выставлен на порт 8080.
Я могу получить доступ к файлу WSDL на HTTP: //network-machine.local: 8080 / сервис WSDL в моем браузере (загружается очень быстро). Однако следующие фрагменты кода просто приводят к фатальной ошибке превышения максимального времени выполнения:
new SoapClient('http://network-machine.local:8080/service?wsdl');
file_get_contents('http://network-machine.local:8080/service?wsdl');
PHP может получить доступ к другим удаленным сервисам (включая WSDL).
Если я сохраню файл wsdl (и его импортированные файлы) на своем локальном компьютере и обновлю ссылки, PHP сможет нормально обращаться к службам API. Это просто не может тянуть в WSDL.
Итак, я предполагаю, что это какая-то проблема с сетью / брандмауэром. Есть идеи?
Изменить с дополнительной информацией:
CURL работает просто отлично. С помощью cURL я могу получить общий размер файла WSDL. Когда я использую этот размер в качестве параметра MAXLENGTH для file_get_contents, эта функция также работает нормально.
Этот кусок кода работал для меня, чтобы прочитать местный wsdl
файл:
$service = new SoapClient(
dirname(__FILE__) .'/mywsdlfile.wsdl',
array(
"trace" => true,
"exceptions" => false)
);
Других решений пока нет …