我在我的 centos-release-6-8.el6.centos.12.3.x86_64 服务器上使用 PHP 5.6。
我的一个 PHP 函数出现以下错误。
Fatal error: Call to undefined function mb_detect_encoding()
因此,我尝试安装 mbstring 扩展。当我执行
sudo yum install php-mbstring
CLI 返回
Package php-mbstring-5.6.25-1.el6.remi.x86_64 already installed and latest version
Nothing to do
我也尝试了“sudo yum install php56-mbstring”,结果返回
No package php56-mbstring available. Nothing to do
但是,PHP 函数仍然给我这个错误,并且 phpinfo() 中没有“mbsting”
我还将以下行添加到 httpd.conf
LoadModule php5_module modules/libphp5.so
服务器重启
更新:
[~]# php -v
PHP 5.6.22 (cli) (built: Jun 13 2016 11:43:51)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
[~]# php -m | grep mbstring
[~]# php -i | grep mbstring
没有返回任何内容到 php -m | grep mbstring & php -i | grep mbstring
[~]# rpm -qil php-mbstring
Name : php-mbstring Relocations: (not relocatable)
Version : 5.6.25 Vendor: Remi Collet
Release : 1.el6.remi Build Date: Wed 31 Aug 2016 18:33:05 BST
Install Date: Mon 05 Sep 2016 16:26:05 BST Build Host: builder.remirepo.net
Group : Development/Languages Source RPM: php-5.6.25-1.el6.remi.src.rpm
Size : 2856446 License: PHP and LGPLv2 and BSD and OpenLDAP
Packager : http://blog.remirepo.net/
URL : http://www.php.net/
/etc/php-zts.d/20-mbstring.ini
/etc/php.d/20-mbstring.ini
/usr/lib64/php-zts/modules/mbstring.so
/usr/lib64/php/modules/mbstring.so
/usr/share/doc/php-mbstring-5.6.25
/usr/share/doc/php-mbstring-5.6.25/libmbfl_LICENSE
/usr/share/doc/php-mbstring-5.6.25/oniguruma_COPYING
/usr/share/doc/php-mbstring-5.6.25/ucgendat_LICENSE
[~]# rpm -qa 'php*'
php-pecl-zip-1.13.4-1.el6.remi.5.6.x86_64
php-pecl-jsonc-1.3.10-1.el6.remi.5.6.x86_64
php-mbstring-5.6.25-1.el6.remi.x86_64
php-common-5.6.25-1.el6.remi.x86_64
答案1
通过 RPM 安装 PHP 扩展/模块会将库文件安装到 中/usr/lib64/php/modules/
。运行php -i |grep ^extension_dir
会显示当前配置的扩展目录。
扩展目录/usr/local/lib/php/extensions/no-debug-non-zts-20131226
表示在过去的某个阶段,PHP 是从源安装的,并且php.ini
目前正在使用与此源安装相关的文件,而不是包/etc/php.ini
提供的文件php-common
。
要解决此问题,您应该删除此源安装的残余内容。不幸的是,PHP 源代码提供的 Makefile 不包含目标,uninstall
因此您无法简单地运行make uninstall
。我建议使用find
命令按修改日期跟踪这些文件。