问题描述
我正在使用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);
来解决。