【问题标题】:PHP 8.0.12 upgrade to PHP 8.1 - multiple module errorsPHP 8.0.12 升级到 PHP 8.1 - 多个模块错误
【发布时间】:2022-01-09 23:03:04
【问题描述】:

很长一段时间以来,我一直在使用 XAMPP 在我的开发工作站上进行升级,从 7 到 8.012 的各种版本。

升级到 8.1 好像碰壁了。

我已编辑 apache 配置以使用新版本的 php。取php.ini-development并将其重命名为php.ini,然后在我重新启动apache后取消注释openssl扩展无效:

extension=openssl

php 信息页面中未启用 Openssl:

如果我尝试通过将我的扩展从以前的安装移过来来启用 mongodb,并取消注释 php.ini 中的扩展并再次重新启动 apache,我会收到错误:

extension=php_mongodb.dll

更新:我现在发现在 PHP 8.1 下启用任何 PHP 模块都不起作用。

我可以回滚到php-8.0.12 的先前版本并再次拥有一个功能齐全的php。当我回滚到以前的版本时,启用和禁用 PHP 模块仍然有效。它在 PHP 8.1 下不起作用。

如果可能的话,我希望了解最新版本!

我对这个版本的 PHP 做错了什么?为什么我什么都不能启用?

【问题讨论】:

  • 您似乎正在使用为 8.0 编译的扩展(如 dll 路径所示)。您不能移动使用不同安装构建的扩展。你需要得到一个为 8.1 构建的
  • 好的,谢谢。我不确定这是否适用于 MongoDB。如果我可以通过pecl install mongodb 安装它,我会的。但是你必须启用openssl 才能做到这一点。正如我在帖子中提到的那样,8.1 甚至不允许我启用openssl。
  • 在 Windows 的 8.0 中,该行是 extension=php_openssl.dll,但您提到的是 extension=openssl,您确定这是正确的吗?不确定这是否在 8.1 中发生了变化。不幸的是,我不知道如何在 Windows 中构建扩展。在 Linux 中,我之前已经设法从源代码构建它们,因此如果您找不到 mongodb 的 8.1 版本,可能会有等效指南
  • 好的,我已经尝试将其更改为 extension=openssl.dll 并再次重新启动 apache。不用找了! phpinfo 中仍然没有显示 openssl 扩展。
  • php_openssl.dll 怎么样?基本上可用的扩展应该在 \ext 所以检查它是否在那里

标签: php php-8.1


【解决方案1】:

我不得不将完整路径设置为 Windows 上的扩展目录。一旦我这样做并重新启动,我就能够启用/禁用扩展。在php.ini 中查找此行并根据您的需要进行调整:

; On windows:
extension_dir = "C:\xampp\php-8.1.0\ext\"

此设置仅在 Windows 上似乎很重要。按照您想要的方式设置该行,重新启动 apache,您应该一切顺利!

【讨论】:

    【解决方案2】:

    您正在复制使用旧版本编译的不兼容模块。如果您正在升级 PHP 版本,您将需要使用特定版本的 PHP 编译并适合您的服务器环境的扩展 DLL 文件。你可以从这里PECL 下载兼容的包。下载 .dll 文件并将其放在您的扩展目录中。然后,您需要启用该扩展程序。 这里是windows系统的指南Installing a PHP extension on Windows。

    对于 MongoDB,请在此处获取 https://pecl.php.net/package/mongodb

    【讨论】:

    • 此时的问题不仅仅是 MongoDB 扩展。我试图加载的模块都没有工作。查看我帖子的更新!
    • 这个答案适用于所有 .dll 扩展。不限于mongodb。
    • 安装 PHP 时,它带有一些预配置的扩展。您需要根据您的 PHP 版本和系统架构,使用答案中提到的相同过程下载并设置一个附加模块。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 2016-03-09
    • 2016-06-04
    • 2022-11-02
    • 2018-12-19
    相关资源
    最近更新 更多