根本原因是PHP未加载mbstring扩展:需确认Loaded Configuration File路径、正确设置extension_dir绝对路径及取消extension=php_mbstring.dll(Windows)或extension=mbstring(Linux)注释,Ubuntu/Debian用sudo apt install php-mbstring,CentOS/RHEL用sudo yum install php-mbstring,安装后必须重启Web服务器。
phpmyadmin 启动时报 the mbstring extension is missing. please check your php configuration,根本原因只有一个:php 进程压根没加载 mbstring 扩展。不是路径写错、不是权限问题、不是 apache 配置漏了——就是 php 启动时根本没读到这个扩展。
很多人改了本地目录下的 php.ini,但 PHP 可能根本没用它。运行 php --ini(命令行)或在网页中调用 phpinfo(),重点看 Loaded Configuration File 这一行。Windows 下常见错误是改了 D:xamppphpphp.ini,但 PHP 实际读的是 C:Windowsphp.ini;Linux 下可能读的是 /etc/php/8.2/apache2/php.ini 而非 /etc/php/8.2/cli/php.ini。不确认这点,所有修改都白做。
这两个配置项互相依赖,单独改一个大概率失败:
extension_dir 必须指向包含 php_mbstring.dll(Windows)或 mbstring.so(Linux/macOS)的绝对路径,不能是相对路径 "ext" —— Windows 下要写成 extension_dir = "C:/php/ext",Linux 下类似 extension_dir = "/usr/lib/php/20220829"
extension=php_mbstring.dll(Windows)或 extension=mbstring(Linux,不带 .so)必须取消注释,且拼写完全匹配文件名(注意大小写,Linux 下尤其敏感)php_mbstring.dll 必须来自同版本 TS 包,否则 Apache 启动直接报错或静默忽略Ubuntu/Debian 或 CentOS/RHEL 上,mbstring 不是“解压丢进 ext 目录”就能用的模块。系统 PHP 由包管理器控制,扩展也必须走对应通道:
sudo apt install php-mbstring(PHP 8.x 默认)或 sudo apt install php8.2-mbstring(指定版本)sudo yum install php-mbstring 或 sudo dnf install php-mbstring
php.ini —— 包管理器会自动在 /etc/php/*/mods-available/ 下启用,并通过符号链接挂载到生效位置php -m | grep mbstring,有输出才表示加载成功PHP 模块是在 Apache/Nginx 启动时一次性加载的,修改 php.ini 或安装新扩展后,只刷新浏览器毫无作用:
立即学习“PHP免费学习笔记(深入)”;
sudo systemctl restart apache2(Debian/Ubuntu)或 sudo systemctl restart httpd(RHEL/CentOS)sudo systemctl restart php8.2-fpm(版本号按实际调整),再重启 nginx
phpinfo() 页面,搜索 Multibyte String,看到模块信息和 Loaded Extensions 里有 mbstring 才算到位最容易被忽略的是 PHP CLI 和 Web SAPI 使用不同配置文件,以及 Linux 下包管理器安装后仍需重启 FPM 进程 —— 很多人 apt install 完就去刷网页,结果还是报错,因为 PHP-FPM 进程根本没重载新模块。