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

解决方案

  1. 打开终端 ctrl+alt+t 并输入:
php -i | grep extension_dir

在我的例子中,它输出:

/user/lib/php/20180731
  1. 找出您的 php.ini 文件: 您可以通过以下任一方式做到这一点:
<?php
phpinfo();

或者在终端上

php -i | grep 'php.ini'
  1. 转到您的 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