结论是php未安装或未启用mbstring扩展;需通过php -m或phpinfo()验证加载状态,linux用apt/yum安装后修改对应php.ini启用extension=mbstring并重启服务,windows需确保php.ini正确配置且php_mbstring.dll存在。

直接结论:这不是代码写错了,是 PHP 没装或没启用 mbstring 扩展。 你调用 mb_strlen() 时出现 Fatal error: Call to undefined function mb_strlen(),说明函数根本不存在——PHP 运行时压根不认识这个函数名。
确认 mbstring 扩展是否已加载
别猜,先验证。在命令行运行:
php -m | grep mbstring
如果没输出,说明扩展未加载;如果输出 mbstring,但 Web 环境仍报错,那很可能是 CLI 和 Web(如 Apache/FPM)用了不同的 php.ini 文件。
Web 端验证更可靠的方式是新建一个 info.php:
<?php phpinfo(); ?>
浏览器打开后搜索 mbstring,看「Loaded Configuration File」路径,以及「mbstring support」是否为 enabled。
Linux(Ubuntu/Debian/CentOS)下安装并启用
常见错误是只改了配置、没装包,或装了包但没启配置。
- 先装扩展包:
sudo apt install php-mbstring(Debian/Ubuntu)或sudo yum install php-mbstring(CentOS 7)或sudo dnf install php-mbstring(CentOS 8+/Fedora) - 装完不等于启用。检查对应 PHP 版本的配置目录,比如
/etc/php/8.2/apache2/php.ini(Apache)或/etc/php/8.2/fpm/php.ini(FPM) - 找到这行:
;extension=mbstring,删掉开头的分号,变成extension=mbstring(注意:PHP 7.4+ 后 Windows 的php_mbstring.dll写法已弃用,Linux 统一用mbstring) - 重启服务:
sudo systemctl restart apache2或sudo systemctl restart php8.2-fpm
Windows 下常见踩坑点
很多人卡在这一步不是因为不会改配置,而是改错了地方或文件没生效:
- 不要只改
php.ini-development或php.ini-production—— PHP 实际读的是php.ini(可能不存在,需手动复制一份) - 确认
extension_dir路径正确,且php_mbstring.dll确实在该目录下(常见路径如C:\php\ext\) - Apache 用户注意:
LoadModule php_module加载顺序不影响扩展,但必须确保PHPIniDir指向的是你修改的那个php.ini - 改完配置后,务必用
php --ini确认 CLI 加载的 ini 文件路径,再用phpinfo()确认 Web 加载的是同一个
为什么 mb_strlen() 不像 strlen() 那样“自带”?
mbstring 是可选扩展,不是核心函数集。PHP 编译时默认不捆绑它,尤其容器环境(如 Alpine)或最小化安装常直接剔除。它的存在意义是处理多字节编码(UTF-8、GBK 等),而 strlen() 只数字节,对中文会返回错误长度——所以不能“默认开”,但一旦要用国际化文本,就必须显式启用。
容易被忽略的一点:有些 Docker 镜像(如 php:8.2-cli)连 php-mbstring 包都没预装,docker-php-ext-install mbstring 是构建时必须步骤,光改 ini 没用。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











