无法在PHP中启用mb_字符串
我需要使用无法在PHP中启用mb_字符串,php,ubuntu,mbstring,Php,Ubuntu,Mbstring,我需要使用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")
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个多小时搜索这个问题,我尝试了很多解决方案,在StackOverflow和AskUbuntu都有
这些解决方案对我不起作用:
这只是举几个例子!我做了深入的搜索,但没有找到我需要的东西。请不要将它标记为重复,因为我真的需要帮助(事实上,这个问题让我很累)
我已经通过终端安装了mb_字符串:
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'));
然而,在这一切之后,我多次重启Apache和MySQL。所以我不明白为什么没有启用mbstring
正如在这篇文章的开头所解释的,我需要根据单词的长度对带有变音符号的单词进行排序。所以,如果你有其他解决办法,我会接受的
我没有收到错误消息,因为这是用于生产的。代码在虚拟机中运行在我的个人网站上;因为它是生产性的,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
文件中的扩展名\u dir
被设置为错误的文件。默认情况下,它将用于以下内容:
extension_dir = './'
解决方案
ctrl+alt+t
并键入:/user/lib/php/20180731
php.ini
文件:
您可以通过以下方式实现:php.ini
文件并更改以下行:exension_dir = '/usr/lib/php/20180731'
查看更多信息
顺便说一下,您必须在安装mbstring
后执行此操作。为此,您可能会发现以下链接很有用:
.dll是windows库。我建议您运行
phpinfo()
查看哪个.ini文件是正确的,以及它是否确实尝试加载MBSTRING,对此表示抱歉。实际上,我发现了;extension=php_mbstring.dll
和;扩展名=mbstring
。我取消了它们的注释,以确保它可以运行apt get install php7.3-mbstring
。您可能需要sudo
。越多越好。如前所述,.dll仅适用于windows。dll是一个动态链接库,它是一种仅限windows的技术。仅取消对php_mbstring条目的注释,然后报告phpinfo()中是否显示了mbstring。我运行了apt get install php7.3-mbstring
,它是最新的。另外,我再次注释了行;extension=php_mbstring.dll
/user/lib/php/20180731
<?php
phpinfo();
php -i | grep 'php.ini'
extension_dir = '/full/path/to/your/php/modules'
exension_dir = '/usr/lib/php/20180731'