#php #soap #soap-client
#php #soap #soap-клиент
Вопрос:
Это отлично работает на моем сервере WAMP, но не работает на главном сервере Linux !?
try{
$client = new SoapClient('http://mywsdl.com?wsdl');
$result = $client->function1([
'code' => '101',
]);
print_r($result);
}
catch(Exception $e){
echo $e->getMessage();
}
Выдает ошибку:
SOAP-ОШИБКА: синтаксический анализ WSDL: не удалось загрузить с — но работает на WAMP
Это очень неприятная ошибка, и многие пытались ее устранить.
Ответ №1:
Эта проблема может быть вызвана отключением загрузчика объектов libxml.
Попробуйте запустить libxml_disable_entity_loader(false); перед созданием экземпляра SoapClient.
Итак, ниже приведено исправление кода
libxml_disable_entity_loader(false);
$client = new SoapClient('http://mywsdl.com?wsdl');
$result = $client->function1([
'code' => '101',
]);
https://www.php.net/manual/en/function.libxml-disable-entity-loader.php
Если вызывается libxml_disable_entity_loader(true);
, это приводит к тому, что новый SoapClient(.) завершается с ошибкой
SOAP-ОШИБКА: синтаксический анализ WSDL: не удалось загрузить с ‘D:path/dm_operations.wsdl ‘ : не удалось загрузить внешнюю сущность «D:path/dm_operations.wsdl
потому что этот wsdl импортирует xsd как другой внешний файл. Протестировано на php 7.1.12, win x64.