PHP SoapClient的::与SoapClient的失败握手定时和失败,使加密

问题描述:

以下的所有在亚马逊EC2上运行PHP SoapClient的::与SoapClient的失败握手定时和失败,使加密

我一直在使用ExactTarget的API来发送电子邮件几个月现在,并且它只是在我的QA环境中停止工作。以下所有代码都适用于我的生产环境。他们的SDK提供了一个名为ET_Client的类,它扩展了内置的PHP SoapClient。有问题的代码行是

parent::__construct($wsdl, array('trace'=>1, 'exceptions'=>0,'connection_timeout'=>120) 

这只是对SoapClient构造函数的调用。是

是我得到在我的日志文件中的错误如下:

[26-Jul-2017 13:42:52 America/New_York] PHP Warning: SoapClient::SoapClient(): SSL: Handshake timed out in /var/www/vhosts/qa.devepc.com/repo/httpdocs/lib/vendor/exacttarget/fuel-sdk-php/ET_Client.php on line 74 [26-Jul-2017 13:42:52 America/New_York] PHP Warning: SoapClient::SoapClient(): Failed to enable crypto in /var/www/vhosts/qa.devepc.com/repo/httpdocs/lib/vendor/exacttarget/fuel-sdk-php/ET_Client.php on line 74 [26-Jul-2017 13:42:52 America/New_York] PHP Warning: SoapClient::SoapClient(https://webservice.exacttarget.com/ETFrameworkFault.xsd): failed to open stream: operation failed in /var/www/vhosts/qa.devepc.com/repo/httpdocs/lib/vendor/exacttarget/fuel-sdk-php/ET_Client.php on line 74 [26-Jul-2017 13:42:52 America/New_York] PHP Warning: SoapClient::SoapClient(): I/O warning : failed to load external entity " https://webservice.exacttarget.com/ETFrameworkFault.xsd " in /var/www/vhosts/qa.devepc.com/repo/httpdocs/lib/vendor/exacttarget/fuel-sdk-php/ET_Client.php on line 74 [26-Jul-2017 13:42:52 America/New_York] PHP Fatal error: SOAP-ERROR: Parsing Schema: can't import schema from ' https://webservice.exacttarget.com/ETFrameworkFault.xsd ' in /var/www/vhosts/qa.devepc.com/repo/httpdocs/lib/vendor/exacttarget/fuel-sdk-php/ET_Client.php on line 74

我还发现,我尝试使用file_get_contents()与SSL资源时得到了类似的错误。

此命令:

php -r "var_dump(file_get_contents('https://google.com/'));" 

给了我以下。

[26-Jul-2017 18:06:13 UTC] PHP Warning: file_get_contents(): SSL: Handshake timed out in Command line code on line 1 [26-Jul-2017 18:06:13 UTC] PHP Warning: file_get_contents(): Failed to enable crypto in Command line code on line 1 [26-Jul-2017 18:06:13 UTC] PHP Warning: file_get_contents(https://google.com/): failed to open stream: operation failed in Command line code on line 1

这有可能是这个问题是由于两个服务器之间的细微的版本差异,但是,它会一直干到17年7月13日,并有自二月到服务器没有更新。另外,我昨天更新了整个服务器,PHP从5.6.25变为5.6.30。我的生产服务器在5.6.22。

我试图通过使用传递给stream_context_create的选项操纵SSL流来弥补问题,但错误仍然存​​在。

当我搜索“无法启用加密”和“SSL:握手超时”时,我发现在流上下文中使用curl的结果很多,但没有找到任何与SoapClient相关的结果。此外,我不想编辑ExactTarget Fuel SDK中的代码,因为我想让供应商库保持无人值守。

有没有人遇到这个或类似的问题与肥皂,如果是的话,有没有解决方案?

在此先感谢。

的php.ini

default_socket_timeout=-1 

可能导致此错误。尝试将其设置为其他东西-1

+0

就是这样。该ini设置的值是QA和生产服务器之间的唯一配置差异。我只是花了一天忽略它,因为它显然不是原因! – dreadpiraterobert