【问题标题】:PHP SoapClient::SoapClient failing with: SSL: Handshake timed and Failed to enable cryptoPHP SoapClient::SoapClient 失败:SSL:握手计时并且无法启用加密
【发布时间】:2017-07-26 18:27:07
【问题描述】:

以下所有内容都在 Amazon EC2 中运行

几个月来,我一直在使用 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 警告:SoapClient::SoapClient(): SSL: Handshake timed out in /var/www/vhosts/qa.devpc.com/repo/httpdocs /lib/vendor/exacttarget/fuel-sdk-php/ET_Client.php 在第 74 行 [2017 年 7 月 26 日 13:42:52 America/New_York] PHP 警告:SoapClient::SoapClient():无法在 /var/www/vhosts/qa.devepc.com/repo/httpdocs/lib/vendor 中启用加密/exacttarget/fuel-sdk-php/ET_Client.php 在第 74 行 [26-Jul-2017 13:42:52 America/New_York] PHP 警告:SoapClient::SoapClient(https://webservice.exacttarget.com/ETFrameworkFault.xsd):无法打开流:/var/www/vhosts/qa.devepc.com/repo 中的操作失败/httpdocs/lib/vendor/exacttarget/fuel-sdk-php/ET_Client.php 在第 74 行 [2017 年 7 月 26 日 13:42:52 America/New_York] PHP 警告:SoapClient::SoapClient():I/O 警告:无法在 /var/www/vhosts/qa 中加载外部实体“https://webservice.exacttarget.com/ETFrameworkFault.xsd”。 devepc.com/repo/httpdocs/lib/vendor/exacttarget/fuel-sdk-php/ET_Client.php 第 74 行 [26-Jul-2017 13:42:52 America/New_York] PHP 致命错误: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 在第 74 行

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

这个命令:

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

给我以下。

[26-Jul-2017 18:06:13 UTC] PHP 警告:file_get_contents(): SSL: Handshake timed out in Command line code on line 1 [2017 年 7 月 26 日 18:06:13 UTC] PHP 警告:file_get_contents():无法在第 1 行的命令行代码中启用加密 [26-Jul-2017 18:06:13 UTC] PHP 警告:file_get_contents(https://google.com/):未能打开流:第 1 行命令行代码中的操作失败

问题可能是由于两台服务器之间的细微版本差异造成的,但它一直运行到 2017 年 7 月 13 日,并且自 2 月以来服务器没有更新。另外,我昨天更新了整个服务器,PHP 从 5.6.25 升级到了 5.6.30。我的生产服务器是 5.6.22。

我已尝试通过使用传递给stream_context_create 的选项操作 SSL 流来解决此问题,但错误仍然存​​在。

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

有没有人在使用肥皂时遇到过这种或类似的问题,如果有,有解决办法吗?

提前致谢。

【问题讨论】:

    标签: php ssl soap soap-client


    【解决方案1】:

    php.ini

    default_socket_timeout=-1  
    

    可能会导致此错误。尝试将其设置为 -1 以外的其他值

    【讨论】:

    • 就是这样。该 ini 设置的值是 QA 和生产服务器之间的唯一配置差异。我只是花了一天时间忽略它,因为它显然不是原因!
    猜你喜欢
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 2012-02-25
    • 2014-10-14
    • 1970-01-01
    相关资源
    最近更新 更多