无法在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'