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

53
我在启用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不是我的专业领域——我被安排负责此事,因为似乎没有人知道任何内容。

1
请问您的php.log日志文件是什么样子的?如果您还没有启用日志记录,请立即进行设置。 - RageZ
进一步解释@RageZ的评论:在php.ini中是否打开了"display_startup_errors"? - Ben Dunlap
是的,我们已经启用了日志记录...但作为一个新手,我完全忘记了检查> _ <我们收到的错误是:“PHP警告:PHP启动:无法加载动态库'C:\ PHP \ ext \ php_openssl.dll'-拒绝访问。”看到这个,我认为可能是php_openssl.dll的权限问题,但我们将其与该文件夹中的另一个dll(我们知道正在加载)进行了比较,它们似乎具有相同的权限和组。还有什么可能会阻止此dll加载吗? - jelina
7个回答

69

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

  1. php.ini-production 重命名为 php.ini(位于 C:\xampp\php\ 文件夹下)
  2. 编辑 php.ini 并取消注释 extension_dir=ext
  3. 同时取消注释 extension=php_openssl.dll

之后它就正常工作了。


1
使用WampServer 2.2,我只需编辑C:\wamp\bin\php\php5.3.13中的php.ini,然后取消注释extension=php_openssl.dll - Rubens Mariuzzo
13
取消注释extension=php_openssl.dll并重新启动Apache对我也起作用。 - Layton Everson
6
非常感谢。这让我几乎要哭了 :) - M. Ahmad Zafar
谢谢,Wamp使用的是与“C:\ wamp \ bin \ php \ phpversion \ php.ini”中的php.ini不同的另一个php.ini文件。 我必须在此php.ini文件中取消注释open_sll扩展名,而不是在wamp提供的php.ini中。我希望这能帮助任何遇到相同问题的人。 - csblo
在5.6.11版本中,对我很有效。现在我可以通过 $data = file_get_contents($url); 读取一个 https URL。 - medloh
这是一个误导性的答案,因为它试图回避问题而不是解决它。实际上,您只需要按照https://dev59.com/rHI-5IYBdhLWcg3wu7BU#9LrmnYgBc1ULPQZFe5z9中描述的设置即可。 - Pacerier

21

成功!

在检查日志文件并确保php_openssl.dll权限正确之后,我谷歌了一下这个警告并找到了更多可尝试的方法。

于是我:

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

我不确定这些方法中哪一个解决了我的问题,但现在它肯定已经修复了! :)

我在这个页面上找到了这些尝试的方法: http://php.net/manual/zh/install.windows.extensions.php

感谢您的帮助!


@RubensMariuzzo 谢谢,但我已经解决了,问题出在我的64位系统上,解决方法是将一些DLL文件复制到某些位置,我不记得具体步骤了。 - coding_idiot
@taarradhin,不需要libeay32.dll和ssleay32,你只需要三个东西: - Pacerier
1
@coding_idiot,1) extension_dir 必须指向包含 php_sockets.dllphp_openssl.dll 的文件夹, 2) 您必须添加以下两行代码:extension=php_openssl.dllextension=php_sockets.dll3) 确保它们的值不会被下面相同的键覆盖。这是非常常见的问题。只需要做好以上三点,您就完成了。 - Pacerier
今天我在这个问题上非常苦恼,而且那三件事情肯定不够。复制两个DLL文件也不行。非常令人沮丧的是,对于这个问题,XAMPP/Windows10/64位没有一个实际、直接的解决方案……我正在考虑重新安装最新版本的XAMPP。 - CK MacLeod

7

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

在Windows 7 64位上安装WAMPServer 2.2后,我只需在php.ini中启用php_openssl,重新启动WAMPServer即可无缝运行。

操作步骤如下:

  • 点击WampServer -> PHP -> PHP扩展 -> php_openssl
  • 重新启动WampServer

7

只需取消注释 extension=php_openssl.dll 重新启动 Apache 服务即可解决问题。


7
在XAMPP版本1.7.4中,服务器的php ini文件中没有extension=php_openssl.dll这一行。我们需要在php.ini文件中添加extension=php_openssl.dll。

确实,它必须手动添加,但是 ext 文件夹幸运地包含了 php_openssl.dll。 - Valentin Despa

1

我也在折腾 Laravel 的时候遇到了这个问题。

我使用的是 Windows 上的 WampServer,不得不将 /bin/apache/apacheversion/bin/php.ini 文件复制到 /bin/php/phpversion/php.ini 中。


0

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

然后,检查了Apache错误日志之后,注意到路径中使用括号的问题。

PHP:C:\Program Files (other)\xampp\php\php.ini的第707行语法错误,“unexpected '('” 0服务器证书不包括与服务器名称匹配的ID

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接