【问题标题】:Intermittent SoapClient I/O warning: failed to load external entity间歇性 SoapClient I/O 警告:无法加载外部实体
【发布时间】:2020-08-10 18:45:33
【问题描述】:

我正在使用 Fedex 运输 API 创建运单。间歇性地我收到以下错误 我发送 API 请求:

Warning: SoapClient::SoapClient(): I/O warning : failed to load external entity "/home/user/public_html/includes/modules/vendor/jeremy-dunn/php-fedex-api-wrapper/src/FedEx/_wsdl/UploadDocumentService_v11.wsdl" in /home/user/public_html/includes/modules/vendor/jeremy-dunn/php-fedex-api-wrapper/src/FedEx/AbstractRequest.php on line 53

Fatal error: SOAP-ERROR: Parsing WSDL: Couldn't load from '/home/user/public_html/includes/modules/vendor/jeremy-dunn/php-fedex-api-wrapper/src/FedEx/_wsdl/UploadDocumentService_v11.wsdl' : failed to load external entity "/home/user/public_html/includes/modules/vendor/jeremy-dunn/php-fedex-api-wrapper/src/FedEx/_wsdl/UploadDocumentService_v11.wsdl" in /home/user/public_html/includes/modules/vendor/jeremy-dunn/php-fedex-api-wrapper/src/FedEx/AbstractRequest.php on line 53

奇怪的是,这只发生在某些货物上。例如,我将有发货 A、B、C。发货 A 会正常发货,B 会抛出错误,C 会正常发货,我会回去重试 B,但它仍然会失败。我会一遍又一遍地尝试它,然后最终它会通过(稍后随机时间,API 请求没有变化)。

另一个奇怪的事情是我在本地加载 WSDL,所以加载它应该不会有任何问题。谷歌搜索我发现当您从外部源加载 WSDL 时最常出现此问题。

当我初始化我的 SOAP 客户端时,我会传递静态 WSDL 本地路径以及以下选项:

$options = array(
            'cache_wsdl' => 0,
            'trace' => 1,
            'stream_context' => stream_context_create(array(
                  'ssl' => array(
                       'verify_peer' => false,
                        'verify_peer_name' => false,
                        'allow_self_signed' => true
                  )
            )));

有人知道它是什么吗?

【问题讨论】:

    标签: php soap soap-client fedex


    【解决方案1】:

    它最终与 PHP 5.6 和我们正在使用的 Linux 发行版中的一个错误有关,以及使用 Soap 客户端。该问题与竞态条件有关,通过在我们的应用程序开头添加libxml_disable_entity_loader(false); 解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2021-08-28
      • 2017-10-20
      • 1970-01-01
      • 2014-06-22
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      • 2019-09-12
      • 1970-01-01
      相关资源
      最近更新 更多