【问题标题】:Socket transport "ssl" in PHP not enabled未启用 PHP 中的套接字传输“ssl”
【发布时间】: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,我完全忘记检查 >_

标签: php ssl iis-6 fsockopen


【解决方案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 服务器。这就是我所做的:

      1. php.ini-production 重命名为 php.ini(在 C:\xampp\php\ 文件夹中)
      2. 编辑 php.ini 并取消注释 extension_dir=ext
      3. 也取消注释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 任何最新版本。
          猜你喜欢
          • 2020-02-11
          • 1970-01-01
          • 2014-03-24
          • 2013-05-14
          • 1970-01-01
          • 2014-06-30
          • 1970-01-01
          • 2010-11-05
          相关资源
          最近更新 更多