未启用 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.dll
和 php_openssl.dll
和 所在的文件夹2) 你必须有extension=php_openssl.dll
和extension=php_sockets.dll
行和3) 确保它们的值不会被下面的相同键覆盖。这是很常见的。就这 3 个,你就完成了。
今天把我的耳朵听出来了,这三件事肯定是不够的。也不会复制这两个 DLL 文件。非常令人抓狂的是,没有针对此问题的实际、直接的 XAMPP/Windows10/64 位解决方案……目前正在考虑从头开始重新安装 XAMPP 任何最新版本。以上是关于未启用 PHP 中的套接字传输“ssl”的主要内容,如果未能解决你的问题,请参考以下文章
找不到套接字传输“tls” - 您在配置 PHP 时是不是忘记启用它
启用 SSL 的网站无法连接到本地 C# Web 套接字服务器