PHP 扩展未启用

PHP 扩展未启用

我正在运行 RHEL 7,并尝试使用 PHP 8.1。正在安装 PHP,并且已安装扩展(按 Yum),但未按 PHP 启用。

  • 例如,如果我php -m | grep dom从命令行运行,我将不会返回任何结果。

  • 如果我跑sudo yum install php81-php-dom然后yum返回

    Package php81-php-xml-8.1.6-1.el7.remi.x86_64 already installed and latest version.
    
  • 我可以用来locate查看有一个at.so的文件。dom/opt/remi/php81/root/usr/lib64/php/modules/dom.so

  • 有一个ini文件位于/etc/opt/remi/php81/php.d/20-dom.ini.

  • 我尝试在/etc/opt/remi/php81/php.d/20-dom.ini和之间创建一个软链接/etc/php.d/(因为我认为这是 ini 文件需要的位置)并且 PHP 返回

    HP Warning:  PHP Startup: Unable to load dynamic library 'dom'
    (tried: /usr/lib64/php/modules/dom (/usr/lib64/php/modules/dom: cannot open shared object file: No such file or directory),
            /usr/lib64/php/modules/dom.so (/usr/lib64/php/modules/dom.so: cannot open shared object file: No such file or directory))
    in Unknown on line 0
    

我不确定需要做什么才能让这个扩展和其他扩展可用于 PHP。我也试过8.0。

任何帮助是极大的赞赏。

答案1

您对 php80-php-* 软件包感到困惑,该软件包专为并行安装多个版本(软件集合)而设计,而 php-* 软件包则用于默认安装。

正如中所解释的常问问题

对于正确的存储库配置,请遵循向导说明

因此,如果您需要 dom 扩展来进行基本安装

yum install php-dom

如果您需要 pgsql 和 mysqli 扩展来安装 SCL

yum install php80-php-pgsql php80-php-mysqli

PS 还提醒您,EL-7 现在已经很老了(8 年),较新的发行版(EL-8 或 EL-9)更适合运行现代软件,例如最近的 PHP 版本。

答案2

在 CentOs 8 上安装 php-pgsql / php-mysql 扩展时遇到类似的问题。

php artisan migrate

PHP警告:PHP启动:无法加载动态库'php_pgsql.dll'(尝试过:/opt/remi/php80/root/usr/lib64/php/modules/php_pgsql.dll(/opt/remi/php80/root/usr /lib64/php/modules/php_pgsql.dll:无法打开共享对象文件:没有这样的文件或目录),/opt/remi/php80/root/usr/lib64/php/modules/php_pgsql.dll.so(/opt/ remi/php80/root/usr/lib64/php/modules/php_pgsql.dll.so: 无法打开共享对象文件: 没有这样的文件或目录)) 在第 0 行的未知中

使用命令解决了 php 8.0 的问题

yum install php80-php-pgsql

答案3

感谢雷米·科莱用于消除单个 PHP 安装和多个版本 PHP 安装的 PHP 扩展安装之间的混淆。

在本例中,在 AlmaLinux 8(Centos 8 兼容)系统上,安装单个 PHP,以用户身份登录root

首先验证单个 PHP 安装:

> locate bin/php
/usr/bin/php
/usr/bin/php-cgi
/usr/bin/phpize
/usr/sbin/php-fpm

确实,单个 PHP 安装。

要进行其他故障排除,请确定 PHP 扩展模块和配置文件的位置。搜索/etc/php.ini发现:

;;;;
; Note: packaged extension modules are now loaded via the .ini files
; found in the directory /etc/php.d; these are loaded by default.
;;;;

请注意,PHP 正在查找/etc/php.d扩展模块配置文件。尝试列出扩展模块及其配置文件:

> ls -la /usr/lib64/php/modules/ | grep dom.so
> ls -la /etc/php.d/ | grep dom.ini

目录下有配置文件吗/etc/php.d?如果是这样,请阅读它以查看 PHP 在哪个目录中查找扩展名,并将其与/usr/lib64/php/modules/dom.so.

如果没有该扩展的配置文件,/etc/php.d这就是 PHP 不加载该扩展的原因。

如果您加载了版本特定的扩展,有两个选项,1)(不推荐)是将配置文件移动到目录/etc/php.d并确保它指向模块位置,或者,2)(推荐)是删除以前的扩展安装并使用正确的存储库和包来安装它。

要为单个 PHP 安装正确安装 PHP 扩展模块...

...首先列出系统当前的回购状态(相关部分):

> dnf repolist all
repo id    repo name                                                  status
apprepo    apprepo                                                    enabled
appstream  AlmaLinux 8 - AppStream                                    enabled
baseos     AlmaLinux 8 - BaseOS                                       enabled
epel       Extra Packages for Enterprise Linux 8 - x86_64             enabled
extras     AlmaLinux 8 - Extras                                       enabled
powertools AlmaLinux 8 - PowerTools                                   enabled
remi       Remi's RPM repository for Enterprise Linux 8 - x86_64      disabled
remi-safe  Safe Remi's RPM repository for Enterprise Linux 8 - x86_64 enabled

是否启用了 PowerTools? (AlmaLinux 8 附带安装的 powertools。)

powertools AlmaLinux 8 - PowerTools                                   enabled

...是的。但是,如果未启用:

> dnf config-manager --set-enabled powertools 

存储库是否epel已安装并启用?在这种情况下是的,但如果不是:

> dnf install epel-release

存储库是否remi已安装并启用?在这种情况下是的,但如果不是:

> dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
> dnf config-manager --set-enabled remi

现在简单地说:

> dnf install php-dom
> systemctl restart nginx
> systemctl restart php-fpm

并验证:

> php -m | grep dom
dom

相关内容