【发布时间】: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