【问题标题】:OpenSSL Support disabled in Apache 2.4/PHP 7.4.4在 Apache 2.4/PHP 7.4.4 中禁用 OpenSSL 支持
【发布时间】:2020-07-17 14:50:52
【问题描述】:

我正在尝试手动设置 Apache MariaDB PHP,但我遇到了 openssl 功能的一些问题。 以下是我设置 Apache 2.4 和 PHP 7.4.4 的步骤:

我。 Apache httpd安装配置

  1. 从 apachelounge 下载 httpd-2.4.43-win64-VS16.zip 并将其提取到“D:\Programs-64Bit\Apache24”
  2. 在 httpd.conf 中使用完整路径设置 ServerRoot
  3. ServerName 设置为localhost:80
  4. 在 httpd.conf 中使用所需的 DocumentRoot 路径定义 WWWROOT(即 Define WWWROOT "E:/Programs/WWW"
  5. DocumentRoot<Directory> 值设置为"${WWWROOT}"

二。 PHP与apache结合

  1. 下载并提取线程安全php-7.4.4-Win32-vc15-x64.zip 到“D:\Programs-64Bit\PHP\PHP7.4.4-64Bit”
  2. 在 httpd.conf 末尾添加以下行:
Define PHPROOT "D:/Programs-64Bit/PHP/PHP7.4.4-64Bit"
LoadModule php7_module "${PHPROOT}/php7apache2_4.dll"
AddType application/x-httpd-php .php
PHPIniDir "${PHPROOT}"

LoadFile "${PHPROOT}/libcrypto-1_1-x64.dll"
LoadFile "${PHPROOT}/libssl-1_1-x64.dll"
LoadFile "${PHPROOT}/libssh2.dll"
LoadFile "${PHPROOT}/nghttp2.dll"
LoadFile "${PHPROOT}/php7ts.dll"
  1. 复制并重命名 php.ini-development 到与 php.ini 相同的 php 根目录
  2. 设置 extension_dir 并启用除 oci8_12c、pdo_firebird、pdo_oci 和 snmp 之外的每个扩展

三。用 Apache 测试 PHP

  1. 使用以下代码创建一个php文件(index.php):
<?php 
     phpinfo();
?>
  1. 运行httpd.exe

这就是它告诉我关于 openssl 的内容:

根据 StackOverflow 上的“OpenSSL support disabled in Apache/PHP on Windows”和 php.net 页面“PHP Manual > Function Reference > Cryptography Extensions > OpenSSL > Installing/Configuring”中的最后一条评论,它应该可以工作。我做错了什么?

【问题讨论】:

    标签: php apache openssl


    【解决方案1】:

    如果您想在 Phar 中启用 OpenSSL 支持
    只需取消注释以下行。

    // php.ini
    extension=openssl
    

    【讨论】:

    • 已经做到了!就像我在原始帖子中所说的那样,除了少数扩展(oci8_12c、pdo_firebird、pdo_oci 和 snmp)之外,每个扩展都已启用
    【解决方案2】:

    这其实很容易解决。在使用命令php index.php 在命令提示符中检查是否在 PHP 上启用了 openssl 之后,其中 index.php 是在原始帖子中创建的文件。可以看出openssl其实是开启的。

    要在 Apache2.4 上启用它,需要在 httpd.conf 中取消注释 LoadModule ssl_module modules/mod_ssl.so

    phar 部分如下所示:

    然后会出现一个 openssl 部分:

    【讨论】:

      【解决方案3】:

      如果任何人的extension=opensslLoadModule ssl_module modules/mod_ssl.so 都未注释并且仍在寻找答案,请尝试将您的extension_dir 设置为绝对路径; extension_dir = "C:\php\ext".

      我已经搜索了几个小时,并解决了它。感谢Koichi's answer。我也不需要我的httpd.conf 中的任何LoadFile 行。


      我的环境(供参考):

      • Windows Server 2019 数据中心
      • PHP 版本 7.4.13
      • Apache/2.4.46 (Win64) OpenSSL/1.1.1i(来自Apache Haus

      【讨论】:

        【解决方案4】:

        我在这个问题上也花了很长时间,并尝试了建议的方法(取消注释行,绝对而不是相对路径)。最终奏效的方法是将 PHP 安装到“C:\php”并更新 Apache 的 httpd.conf 中的 PHP 模块设置,而不是将其放在其他路径中。感觉好像某个地方存在 Apache 问题,因为当 PHP 安装在我最初的非标准路径中并由另一个 Web 服务器提供服务时,它工作得非常好。

        如果您在其他地方安装了 PHP,并且能够将其移动到 C:\php 并调整 Apache 的设置,那么值得一试。

        【讨论】:

        • 这并不是一个真正令人满意的答案。数以百万计的用户在非常不同的路径上安装了 php,所以这肯定不是问题的原因。
        • 是的,我同意这个评论。
        • @amoschou 也许您的 apache 安装不允许在 php.ini 的路径中有空格。也许这就是它与 C:\php 一起工作的原因。如果是这种情况,那么可以尝试使用双引号来定义路径。还知道您的配置(操作系统、apache 版本、php 版本)会对其他人有所帮助
        猜你喜欢
        • 2017-06-02
        • 2017-03-12
        • 2020-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-28
        • 2015-05-24
        • 2014-11-24
        相关资源
        最近更新 更多