我正在运行 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
答案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