间歇性的SoapClient I / O警告:无法加载外部实体

问题描述

我正在使用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 5.6和我们正在使用的Linux发行版中的错误以及结合使用Soap Client有关。该问题与竞争条件有关,已通过在应用程序的开头添加libxml_disable_entity_loader(false);来解决。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...