PHP 8.5.7 默认不启用 mbstring 扩展,需精准定位并修改对应 php.ini(CLI/Web/FPM 各自独立),取消 extension=mbstring 注释,添加 mbstring.internal_encoding = UTF-8,并重启对应服务验证。

PHP 8.5.7 默认不启用 mbstring 扩展,即使扩展文件已安装,只要 php.ini 中未正确启用或配置,调用 mb_strlen() 等函数就会报错:Call to undefined function mb_strlen()。关键不是重装 PHP,而是精准定位并修正加载链路。
确认真实生效的 php.ini 文件
CLI 和 Web(如 Apache/Nginx+PHP-FPM)可能使用完全不同的配置文件,改错位置等于白做。
- 命令行执行:
php --ini,看 Loaded Configuration File 路径 - Web 环境创建
info.php,内容为<?php phpinfo(); ?>,浏览器访问后搜索 Loaded Configuration File - 常见误区:Ubuntu/Debian 下 CLI 用
/etc/php/8.5/cli/php.ini,而 Apache 用/etc/php/8.5/apache2/php.ini;PHP-FPM 则用/etc/php/8.5/fpm/php.ini
启用扩展并验证文件存在
确保扩展模块文件真实存在,且启用语句与文件名严格匹配。
- Linux/macOS:运行
php -m | grep mbstring,无输出说明扩展未加载或未安装 - 若未安装,执行:
sudo apt install php8.5-mbstring(Ubuntu/Debian)或sudo dnf install php-mbstring(CentOS/RHEL 8+) - 编辑对应 php.ini(非全局模板),取消注释:
extension=mbstring(注意:不带 .so,大小写敏感) - Windows 用户检查:
extension_dir是否指向含php_mbstring.dll的绝对路径,再取消;extension=php_mbstring.dll前的分号
设置内部编码避免行为异常
不设 mbstring.internal_encoding,mb_* 函数默认按 ISO-8859-1 处理 UTF-8 字符串,会导致截断、大小写转换错误等隐蔽问题。
立即学习“PHP免费学习笔记(深入)”;
- 在 php.ini 中 extension=mbstring 后添加两行:
mbstring.language = Neutralmbstring.internal_encoding = UTF-8- ⚠️ 不要用
mb_internal_encoding('UTF-8')在脚本中动态设置——PHP 8.2 起该 ini 指令已废弃,且动态设只作用于当前请求 - 验证:写个测试脚本
<?php echo mb_internal_encoding(); ?>,输出必须是UTF-8
重启对应服务并最终验证
修改 php.ini 后必须重启 PHP 进程,否则配置不生效。
- Apache:执行
sudo systemctl restart apache2 - PHP-FPM:执行
sudo systemctl restart php8.5-fpm(版本号需匹配) - Nginx + FPM:只需重启
php8.5-fpm,Nginx 无需重启 - 最终验证:Web 页面中运行
var_dump(function_exists('mb_strlen'));,返回bool(true)即成功



















