无法在 PHP 中启用 mb_string
Cannot enable mb_string in PHP
我需要使用 mb_strlen
对带有变音符号的单词数组进行排序,但是 PHP 无法识别此功能,尽管安装了 mb_string
。
所以,如果我说
function sortByStrlen($a, $b)
{
if (mb_strlen($a, "utf-8") === mb_strlen($b, "utf-8")) {
return $a > $b;
} else {
return mb_strlen($b, "utf-8") - mb_strlen($a, "utf-8");
}
}
#sort my array
usort($myArray, 'sortByStrlen');
无法在服务器上 运行 的 Ubuntu 虚拟机上运行,尽管它在我的 Windows 本地计算机上运行,
我已经花了超过 2.5 小时搜索这个问题,并且尝试了很多解决方案,包括在 Whosebug 和 AskUbuntu.
这些解决方案对我不起作用:
PHP: Call to undefined function mb_strlen() - on custom compiled PHP with mbstring enabled
Fatal error: Call to undefined function mb_strlen()
Call to undefined function yii\helpers\mb_strlen() on PHP in Yii2 Framework
https://askubuntu.com/questions/772397/mbstring-is-missing-for-phpmyadmin-in-ubuntu-16-04
这只是举几个例子!我进行了深入搜索,但没有找到我需要的东西。请不要将其标记为重复,因为我真的需要帮助(确实,这个问题让我很累)。
我已经通过终端安装了mb_string:
sudo apt-get install php7.3-mbstring
我确定 mbstring
模块与我的 PHP 版本兼容。然后,我取消注释 php.ini 中的行以激活 mbstring
模块
;extension=mbstring
我也取消注释扩展:
extension_dir = "./"
我重启了服务器:
sudo /etc/init.d/apache2 restart
当我使用 php-m
.
时,我还会看到其他模块,例如 mysql
当我 运行 phpinfo
时,我可以看到 mbstring
在正在加载的模块列表中。
如果我在终端上 运行 php -m
,它会给我一个模块列表,mbstring
在那里。
但是,如果我 运行:
<?php
var_dump(extension_loaded('mbstring'));
它将输出:
bool(false)
然而,在这一切之后,我重新启动了 Apache 并 MySQL 多次。所以我不明白为什么 mbstring
没有被启用!
如本文开头所述 post,我需要按长度对带有变音符号的单词进行排序。所以,如果您对此有其他解决方案,我会接受。
我没有收到错误消息,因为这是用于生产的。代码是 运行ning 在我的虚拟机个人网站上;因为它是生产环境,PHP 默认情况下不显示错误,我不知道如何启用它们。
备注:
Ubuntu 版本为 18.04
PHP 版本为 7.3
更新 2
根据@gview 的要求,如果我 运行 dpkg -l | grep php
,我得到:
ii libapache2-mod-php7.3 7.3.7-2+ubuntu18.04.1+deb.sury.org+1 amd64 server-side, HTML-embedded scripting language (Apache 2 module)
ii php-common 2:69+ubuntu18.04.1+deb.sury.org+2+php7.3 all Common files for PHP packages
ii php-gettext 1.0.12-0.1 all transitional dummy package for php-php-gettext
ii php-mbstring 2:7.3+69+ubuntu18.04.1+deb.sury.org+2+php7.3 all MBSTRING module for PHP [default]
ii php-pear 1:1.10.8+submodules+notgz-1+ubuntu18.04.1+deb.sury.org+1 all PEAR Base System
ii php-php-gettext 1.0.12-0.1 all read gettext MO files directly, without requiring anything other than PHP
ii php-xml 2:7.3+69+ubuntu18.04.1+deb.sury.org+2+php7.3 all DOM, SimpleXML, WDDX, XML, and XSL module for PHP [default]
ii php7.3 7.3.7-2+ubuntu18.04.1+deb.sury.org+1 all server-side, HTML-embedded scripting language (metapackage)
ii php7.3-cli 7.3.7-2+ubuntu18.04.1+deb.sury.org+1 amd64 command-line interpreter for the PHP scripting language
ii php7.3-common 7.3.7-2+ubuntu18.04.1+deb.sury.org+1 amd64 documentation, examples and common module for PHP
ii php7.3-json 7.3.7-2+ubuntu18.04.1+deb.sury.org+1 amd64 JSON module for PHP
ii php7.3-mbstring 7.3.7-2+ubuntu18.04.1+deb.sury.org+1 amd64 MBSTRING module for PHP
ii php7.3-mysql 7.3.7-2+ubuntu18.04.1+deb.sury.org+1 amd64 MySQL module for PHP
ii php7.3-opcache 7.3.7-2+ubuntu18.04.1+deb.sury.org+1 amd64 Zend OpCache module for PHP
ii php7.3-readline 7.3.7-2+ubuntu18.04.1+deb.sury.org+1 amd64 readline module for PHP
ii php7.3-xml 7.3.7-2+ubuntu18.04.1+deb.sury.org+1 amd64 DOM, SimpleXML, WDDX, XML, and XSL module for PHP
这可能对你有帮助。
经过 3.5 个多小时的搜索,我找到了解决方案!!!我希望它能帮助其他人!!
错误
所以,问题是 php.ini
文件中的 extension_dir
被设置为错误的文件。默认情况下,它是以下内容:
extension_dir = './'
解决方案
- 打开终端
ctrl+alt+t
并输入:
php -i | grep extension_dir
在我的例子中,它输出:
/user/lib/php/20180731
- 找出您的
php.ini
文件:
您可以通过以下任一方式做到这一点:
<?php
phpinfo();
或者在终端上
php -i | grep 'php.ini'
- 转到您的
php.ini
文件并更改以下行:
extension_dir = '/full/path/to/your/php/modules'
就我而言,是:
exension_dir = '/usr/lib/php/20180731'
查看更多
顺便说一句,您必须在安装 mbstring
之后执行此操作。为此,您可能会发现以下链接很有用:
PHP: Call to undefined function mb_strlen() - on custom compiled PHP with mbstring enabled
Fatal error: Call to undefined function mb_strlen()
Call to undefined function yii\helpers\mb_strlen() on PHP in Yii2 Framework
https://askubuntu.com/questions/772397/mbstring-is-missing-for-phpmyadmin-in-ubuntu-16-04
我需要使用 mb_strlen
对带有变音符号的单词数组进行排序,但是 PHP 无法识别此功能,尽管安装了 mb_string
。
所以,如果我说
function sortByStrlen($a, $b)
{
if (mb_strlen($a, "utf-8") === mb_strlen($b, "utf-8")) {
return $a > $b;
} else {
return mb_strlen($b, "utf-8") - mb_strlen($a, "utf-8");
}
}
#sort my array
usort($myArray, 'sortByStrlen');
无法在服务器上 运行 的 Ubuntu 虚拟机上运行,尽管它在我的 Windows 本地计算机上运行,
我已经花了超过 2.5 小时搜索这个问题,并且尝试了很多解决方案,包括在 Whosebug 和 AskUbuntu.
这些解决方案对我不起作用:
PHP: Call to undefined function mb_strlen() - on custom compiled PHP with mbstring enabled
Fatal error: Call to undefined function mb_strlen()
Call to undefined function yii\helpers\mb_strlen() on PHP in Yii2 Framework
https://askubuntu.com/questions/772397/mbstring-is-missing-for-phpmyadmin-in-ubuntu-16-04
这只是举几个例子!我进行了深入搜索,但没有找到我需要的东西。请不要将其标记为重复,因为我真的需要帮助(确实,这个问题让我很累)。
我已经通过终端安装了mb_string:
sudo apt-get install php7.3-mbstring
我确定 mbstring
模块与我的 PHP 版本兼容。然后,我取消注释 php.ini 中的行以激活 mbstring
模块
;extension=mbstring
我也取消注释扩展:
extension_dir = "./"
我重启了服务器:
sudo /etc/init.d/apache2 restart
当我使用 php-m
.
mysql
当我 运行 phpinfo
时,我可以看到 mbstring
在正在加载的模块列表中。
如果我在终端上 运行 php -m
,它会给我一个模块列表,mbstring
在那里。
但是,如果我 运行:
<?php
var_dump(extension_loaded('mbstring'));
它将输出:
bool(false)
然而,在这一切之后,我重新启动了 Apache 并 MySQL 多次。所以我不明白为什么 mbstring
没有被启用!
如本文开头所述 post,我需要按长度对带有变音符号的单词进行排序。所以,如果您对此有其他解决方案,我会接受。
我没有收到错误消息,因为这是用于生产的。代码是 运行ning 在我的虚拟机个人网站上;因为它是生产环境,PHP 默认情况下不显示错误,我不知道如何启用它们。
备注: Ubuntu 版本为 18.04 PHP 版本为 7.3
更新 2
根据@gview 的要求,如果我 运行 dpkg -l | grep php
,我得到:
ii libapache2-mod-php7.3 7.3.7-2+ubuntu18.04.1+deb.sury.org+1 amd64 server-side, HTML-embedded scripting language (Apache 2 module)
ii php-common 2:69+ubuntu18.04.1+deb.sury.org+2+php7.3 all Common files for PHP packages
ii php-gettext 1.0.12-0.1 all transitional dummy package for php-php-gettext
ii php-mbstring 2:7.3+69+ubuntu18.04.1+deb.sury.org+2+php7.3 all MBSTRING module for PHP [default]
ii php-pear 1:1.10.8+submodules+notgz-1+ubuntu18.04.1+deb.sury.org+1 all PEAR Base System
ii php-php-gettext 1.0.12-0.1 all read gettext MO files directly, without requiring anything other than PHP
ii php-xml 2:7.3+69+ubuntu18.04.1+deb.sury.org+2+php7.3 all DOM, SimpleXML, WDDX, XML, and XSL module for PHP [default]
ii php7.3 7.3.7-2+ubuntu18.04.1+deb.sury.org+1 all server-side, HTML-embedded scripting language (metapackage)
ii php7.3-cli 7.3.7-2+ubuntu18.04.1+deb.sury.org+1 amd64 command-line interpreter for the PHP scripting language
ii php7.3-common 7.3.7-2+ubuntu18.04.1+deb.sury.org+1 amd64 documentation, examples and common module for PHP
ii php7.3-json 7.3.7-2+ubuntu18.04.1+deb.sury.org+1 amd64 JSON module for PHP
ii php7.3-mbstring 7.3.7-2+ubuntu18.04.1+deb.sury.org+1 amd64 MBSTRING module for PHP
ii php7.3-mysql 7.3.7-2+ubuntu18.04.1+deb.sury.org+1 amd64 MySQL module for PHP
ii php7.3-opcache 7.3.7-2+ubuntu18.04.1+deb.sury.org+1 amd64 Zend OpCache module for PHP
ii php7.3-readline 7.3.7-2+ubuntu18.04.1+deb.sury.org+1 amd64 readline module for PHP
ii php7.3-xml 7.3.7-2+ubuntu18.04.1+deb.sury.org+1 amd64 DOM, SimpleXML, WDDX, XML, and XSL module for PHP
这可能对你有帮助。
经过 3.5 个多小时的搜索,我找到了解决方案!!!我希望它能帮助其他人!!
错误
所以,问题是 php.ini
文件中的 extension_dir
被设置为错误的文件。默认情况下,它是以下内容:
extension_dir = './'
解决方案
- 打开终端
ctrl+alt+t
并输入:
php -i | grep extension_dir
在我的例子中,它输出:
/user/lib/php/20180731
- 找出您的
php.ini
文件: 您可以通过以下任一方式做到这一点:
<?php
phpinfo();
或者在终端上
php -i | grep 'php.ini'
- 转到您的
php.ini
文件并更改以下行:
extension_dir = '/full/path/to/your/php/modules'
就我而言,是:
exension_dir = '/usr/lib/php/20180731'
查看更多
顺便说一句,您必须在安装 mbstring
之后执行此操作。为此,您可能会发现以下链接很有用:
PHP: Call to undefined function mb_strlen() - on custom compiled PHP with mbstring enabled
Fatal error: Call to undefined function mb_strlen()
Call to undefined function yii\helpers\mb_strlen() on PHP in Yii2 Framework
https://askubuntu.com/questions/772397/mbstring-is-missing-for-phpmyadmin-in-ubuntu-16-04