未启用 PHP 中的套接字传输“ssl”

Posted

技术标签:

【中文标题】未启用 PHP 中的套接字传输“ssl”【英文标题】:Socket transport "ssl" in PHP not enabled 【发布时间】:2010-12-14 22:04:33 【问题描述】:

我无法在 php 中启用套接字传输“ssl”。当我运行我的脚本时,我得到了错误:

警告:fsockopen() [function.fsockopen]:无法 连接到 ssl://www.my.site.com:443 (找不到套接字传输 “ssl” - 您是否忘记启用它 什么时候配置PHP?)

我在 Windows 上运行 IIS6,这是我迄今为止为使其正常工作所做的工作:

取消注释 php.ini 中的 php_openssl.dll 和 php_sockets.dll 扩展 确保 PHP 正在加载我对其进行更改的 ini 文件(确实如此,而且它肯定正在加载其他扩展,所以我很确定这不是问题) 确保 php_openssl.dll 和 php_sockets.dll 位于正确的位置 将 ssleay32.dll 和 libeay32.dll 复制到 PHP 主文件夹、WINDOWS 文件夹和 WINDOWS/system32 文件夹中 确保 Windows 路径变量包含 PHP 的位置 确保所有相关文件的文件权限正确。

几乎每次更改后我都重新启动了 IIS,但我没有运气。有什么明显的我做错了吗?有没有办法在较小的部分解决这个问题? (所以我可以通过排除的过程找出问题...?)

不幸的是,Windows/IIS 不是我的专业领域——我被任命为负责人,因为其他人似乎什么都不知道。

【问题讨论】:

php.log 的外观如何,如果您没有启用日志记录,请启用。 扩展@RageZ 的评论:php.ini 中是否打开了“display_startup_errors”? 是的,我们确实启用了日志记录...但是作为我的 n00b,我完全忘记检查 >_ 【参考方案1】:

我正在使用 XAMPP 并遇到了同样的错误。我已经完成了所有这些步骤,添加了环境变量路径,将 dll 的每个可能的目录复制到 /php、/apache/bin、/system32、/syswow64 等。但仍然出现此错误。

然后在检查 apache 错误日志后,我注意到在路径中使用括号的问题。

PHP:语法错误,C:\Program Files 中出现意外的 '(' (other)\xampp\php\php.ini on line 707 0 服务器证书不 包含与服务器名称匹配的 ID

如果您将服务器安装在“Program Files (x86)”目录中,由于未转义的括号,可能会出现同样的错误。

要解决此问题,请打开 php.ini 文件并找到包含“include_path”的行并用双引号将路径括起来以修复此错误。

include_path="C:\Program Files (其他)\xampp\php\PEAR"

【讨论】:

【参考方案2】:

只需取消注释extension=php_openssl.dll 重新启动 Apache 服务,这应该会有所帮助。

【讨论】:

【参考方案3】:

我在 Windows 7 中遇到问题,在命令行中使用 PHP 5.4.0,使用 Xampp 1.8.1 服务器。这就是我所做的:

    php.ini-production 重命名为 php.ini(在 C:\xampp\php\ 文件夹中) 编辑 php.ini 并取消注释 extension_dir=ext。 也取消注释extension=php_openssl.dll

之后一切正常。

【讨论】:

使用 WampServer 2.2 我只需在 C:\wamp\bin\php\php5.3.13 中编辑 php.ini 然后取消注释 extension=php_openssl.dll 取消注释 extension=php_openssl.dll 并重新启动 Apache 也对我有用。 非常感谢。它几乎让我哭了:-) 谢谢,Wamp 使用了另一个 php.ini 文件,而不是 "C:\wamp\bin\php\phpversion\php.ini" 中的 php.ini 我不得不取消注释这个 php 中的 open_sll 扩展名。 ini 文件,而不是在 wamp 提出的 php.ini 中。我希望这会对遇到同样问题的人有所帮助。 在 5.6.11 上为我工作,我现在可以使用 $data = file_get_contents($url); 读取 https url;【参考方案4】:

在 Laravel 4 上尝试使用 SSL 加密发送电子邮件时遇到了同样的问题。

在 Windows 7 64bit 上安装 WAMPServer 2.2 我只在 php.ini 中启用了 php_openssl,重新启动了 WAMPServer 并完美运行。

做了以下事情:

点击 WampServer -> PHP -> PHP 扩展 -> php_openssl 重启 WampServer

【讨论】:

【参考方案5】:

在 XAMPP 版本 1.7.4 服务器的 php ini 文件中没有 extension=php_openssl.dll 行。我们必须在 php.ini 文件中添加 extension=php_openssl.dll

【讨论】:

确实要手动添加,幸好ext文件夹里面有php_openssl.dll。【参考方案6】:

我刚才在搞乱laravel时也遇到了这个问题。

我在 windows 上使用 wampserver,必须将 /bin/apache/apacheversion/bin/php.ini 文件复制到 /bin/php/phpversion/php.ini

【讨论】:

【参考方案7】:

成功了!

在检查日志文件并确保 php_openssl.dll 的权限正确后,我搜索了警告并找到了更多可以尝试的方法。

所以我:

将 C:\PHP\ext 添加到 Windows 路径 将 libeay32.dll 和 ssleay32.dll 添加到 C:\WINDOWS\system32\inetsrv 重启服务器

我不确定这些解决了我的问题,但现在肯定解决了! :)

我在这个页面上发现了这些可以尝试的东西: http://php.net/manual/en/install.windows.extensions.php

感谢您的帮助!

【讨论】:

@RubensMariuzzo 谢谢,但我已经解决了,问题出在我的 64 位系统上,解决方案是在某些位置复制一些 DLL,我不记得确切的步骤。 @taarradhin,不需要 libeay32.dll 和 ssleay32,你只需要 3 样东西: @coding_idiot, 1) extension_dir 必须指向 php_sockets.dllphp_openssl.dll 所在的文件夹2) 你必须有extension=php_openssl.dllextension=php_sockets.dll 行和3) 确保它们的值不会被下面的相同键覆盖。这是很常见的。就这 3 个,你就完成了。 今天把我的耳朵听出来了,这三件事肯定是不够的。也不会复制这两个 DLL 文件。非常令人抓狂的是,没有针对此问题的实际、直接的 XAMPP/Windows10/64 位解决方案……目前正在考虑从头开始重新安装 XAMPP 任何最新版本。

以上是关于未启用 PHP 中的套接字传输“ssl”的主要内容,如果未能解决你的问题,请参考以下文章

找不到套接字传输“tls” - 您在配置 PHP 时是不是忘记启用它

为 SSL 套接字启用哪些密码套件?

启用 SSL 的网站无法连接到本地 C# Web 套接字服务器

在 C++ 中的 UDP 套接字编程中获取“传输端点未连接”

JMeter中的HTTPS套接字错误

是啥导致 ZeroMQ 中的“传输端点未连接”?