libxml_disable_entity_loader(false) для ошибки SoapClient, т.е. «SOAP-ОШИБКА: синтаксический анализ WSDL: не удалось загрузить с «

#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.