致命错误:调用未定义的函数mb_strlen()。

84

我正在尝试制作一个捐赠中心,我使用了Tutorialzine的源代码。

到目前为止,一切都很好,但唯一困扰我的问题是,我一整天都在尝试查找并且无法确定代码出了什么问题。

当我的访问者捐款并提交评论时,我看到了以下内容:

Fatal error: Call to undefined function mb_strlen() in /home/yoursn0w/public_html/livetv/premium/thankyou.php on line 14

以下是 PHP 文件中的代码。

<?php

require "config.php";
require "connect.php";

if(isset($_POST['submitform']) && isset($_POST['txn_id']))
{
    $_POST['nameField'] = esc($_POST['nameField']);
    $_POST['websiteField'] =  esc($_POST['websiteField']);
    $_POST['messageField'] = esc($_POST['messageField']);

    $error = array();

    if(mb_strlen($_POST['nameField'],"utf-8")<2)
    {
        $error[] = 'Please fill in a valid name.';
    }

    if(mb_strlen($_POST['messageField'],"utf-8")<2)
    {
        $error[] = 'Please fill in a longer message.';
    }

    if(!validateURL($_POST['websiteField']))
    {
        $error[] = 'The URL you entered is invalid.';
    }

    $errorString = '';
    if(count($error))
    {
        $errorString = join('<br />',$error);
    }
    else
    {
        mysql_query("   INSERT INTO dc_comments (transaction_id, name, url, message)
                        VALUES (
                            '".esc($_POST['txn_id'])."',
                            '".$_POST['nameField']."',
                            '".$_POST['websiteField']."',
                            '".$_POST['messageField']."'
                        )");

        if(mysql_affected_rows($link)==1)
        {
            $messageString = '<a href="donate.php">You were added to our donor list! &raquo;</a>';
        }
    }
}

?>

我已将我的数据库上传到 phpMyAdmin 中

这是我按照安装说明进行操作的地方

http://tutorialzine.com/2010/05/donation-center-php-mysql-paypal-api/


2
你需要启用或安装mbstring PHP扩展来使用该函数。请参考http://www.php.net/manual/en/mbstring.installation.php。 - hakre
10个回答

89

1
mbstring.detect_order mbstring.encoding_translation
mbstring.func_overload
mbstring.http_input
mbstring.http_output mbstring.internal_encoding mbstring.language
mbstring.substitute_character这是我找到的内容,哪一个可以定义我需要启用的内容?请指引我正确的选项。
- Ali
2
@Ali - 很多系统都有多个php.ini文件的实例,这可能会让人感到困惑。最好的做法是在您的站点下实现一个测试页面,仅调用phpinfo()函数。搜索该页面的输出以查找“mbstring”模块。如果未看到它,则未安装。 - AJ.
2
@Ali - 通过创建一个仅调用 phpinfo() 的 PHP 页面,您不会丢失任何数据。请根据我的先前评论尝试此操作,查看在您的环境中是否安装了 mbstring。 - AJ.
1
@Ali - 两件事:1. 我没有看到任何有关在你的环境中安装mbstring的证据。如果你有权限,你需要安装它。请参考我提供的文档链接。2. 删除测试页面的URL!你的公共主机名在phpinfo()输出中可见。通过发布公共主机名,你正在暴露自己面临风险。我的意图是帮助你,但其他人可能有更恶意的意图。 - AJ.
3
@AJ,我终于安装了mbstring,现在我的脚本可以运行了!这是我所做的,比我想象的要简单得多!!!在WHM->软件->EasyApache中,在第5步中,点击详尽选项列表,并勾选Mbstring复选框,然后继续构建过程。 这比手动操作要简单得多。 - Ali
显示剩余11条评论

49

安装php7.0-mbstring包即可解决此问题:

sudo apt install php7.0-mbstring

4
这适用于任何使用apt并具有更新软件包的系统,例如Ubuntu 16.06 LTS。在运行此命令后,我需要使用sudo systemctl restart apache2重启Apache才能使用mbstring函数。 - Justin Michael
需要在使用nginx的16.04 LTS上为RedBeanPHP做这个。 - malhal
对我来说:sudo apt install php5.6-mbstring && sudo service nginx reload - Matiss
今天在Ubuntu 22.04上仍然有效,对我来说是apt-get install php7.4-mbstring +1。 - Ergest Basha

16

对我来说,下面的命令起了关键作用

sudo apt install php-mbstring

对你来说可能没问题,但是也许原帖作者没有使用 shell 命令的权限。 - Funk Forty Niner

7
在Centos、RedHat、Fedora等yum包管理系统中,它比PHP手册建议的简单得多:
yum install php-mbstring
service httpd restart

6

对我来说,在Ubuntu 14.04和php5.6上可以这样做:

$ sudo apt-get install php5.6-mbstring

3
这个问题似乎与Unix上的PHP有关。然而,如果有人想获取在Windows上的PHP信息,请访问https://www.php.net/manual/en/install.pecl.windows.php
由于多字节字符串支持是核心PHP扩展,因此在Windows上唯一需要做的就是取消注释php.ini中的这行代码:
extension=php_mbstring.dll

3

PHP 7.2 Ubuntu 18.04

sudo apt install php-mbstring

3

这个在Debian stretch上对我起作用了。

sudo apt-get update
sudo apt install php-mbstring
service apache2 restart

谢谢!仅安装php-mbstring对我来说还不够,还需要重启Apache。 - Arthur Sult

2
最初的回答:如果谷歌搜索这个错误
Call to undefined function mb_ereg_match()

需要把某人带到这个线程。安装php-mbstring也可以解决这个问题。

Ubuntu 18.04.1,PHP 7.2.10

sudo apt-get install php7.2-mbstring

0

对我来说解决方法是安装php-mbstring包。

对于最新的PHP版本,例如:

sudo apt-get install php-mbstring

或者对于 PHP 7.4,可以这样:

sudo add-apt-repository ppa:ondrej/php

sudo apt-get install php7.4-mbstring

最后,重启服务,例如 Apache:

sudo systemctl restart apache2

对于nginx,可以这样:

sudo service nginx reload

请注意,ppa:ondrej/php 警告不支持已经过期的 PHP 版本,但在撰写本文时,它们也包括 PHP 5.6。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接