需启用PHP sodium扩展:Debian/Ubuntu用apt install php-sodium,CentOS/RHEL 8+用dnf install php-sodium,7及更早需先启用EPEL;源码编译PHP需加--with-sodium参数并安装对应开发包。
phpMyAdmin 报错 Extension sodium is missing 怎么办
这个错误不是 phpmyadmin 自己的问题,而是 php 运行时确实没加载 sodium 扩展——它从 php 7.2 起就是核心加密扩展,但默认不启用,尤其在源码编译或某些旧版包管理安装的 php 中常被跳过。
验证方式很简单:php -m | grep sodium 如果没输出,或者 phpinfo() 里搜不到 sodium 模块,就确认缺失。
- 别急着重装 PHP,90% 场景只需启用或单独编译扩展
- Debian/Ubuntu 用户优先用
apt install php-sodium,比手动编译稳妥 - CentOS/RHEL 8+ 用
dnf install php-sodium;7 及更早需先启用 EPEL,再装php-pecl-sodium - 若用源码编译 PHP,必须加
--with-sodium参数(且系统已装libsodium-dev或libsodium-devel)
源码编译 sodium 扩展时常见的依赖和路径问题
单独编译扩展比重新编译整个 PHP 更轻量,但容易卡在依赖和路径上。PHP 官方提供 pecl install sodium,但它默认拉取的是 PECL 上的旧版(如 v2.x),而 PHP 7.4+ 内置的其实是 lib/libsodium v1.x 兼容层,版本错位会导致 undefined symbol: crypto_pwhash_str_needs_rehash 类似错误。
- 先运行
php-config --extension-dir确认扩展存放路径,编译后要确保sodium.so放对地方 - 编译前必须装系统级 libsodium:Ubuntu/Debian 用
sudo apt install libsodium-dev,CentOS 用sudo yum install libsodium-devel - 不用
pecl install sodium,改用 PHP 源码树里的 ext/sodium 目录:进该目录后执行phpize && ./configure && make && sudo make install - 检查生成的
sodium.so是否有动态链接异常:ldd /path/to/sodium.so | grep sodium,若报not found,说明 libsodium 库路径未被 ldconfig 记录
启用 sodium 后 phpMyAdmin 仍报错?检查这三处
扩展装好了、php -m 看到了 sodium,但 phpMyAdmin 还是提示缺失,大概率是 PHP 配置没生效,或 Web 服务器用的是另一套配置。
- 确认 phpMyAdmin 所用的 PHP 是你刚配的那个:在 phpMyAdmin 根目录建个
test.php,写<?php phpinfo(); ?>,打开看Loaded Configuration File路径,再检查该php.ini里是否有extension=sodium(注意不是extension=php_sodium.dll或带路径的写法) - Apache 用户注意:如果用了
php_admin_value extension在虚拟主机里覆盖,可能禁用了全局扩展,删掉这类覆盖项 - PHP-FPM 场景下,
www.conf中的php_admin_flag[disable_functions]若包含sodium_*相关函数,也会导致功能不可用,需移除
为什么有些环境死活找不到 libsodium.h 头文件
configure: error: Cannot find libsodium.h 这类错误,本质是开发头文件包没装,而非 libsodium 运行库本身缺失。运行时库(libsodium.so)和编译时头文件(libsodium.h)在包管理中常分属不同包。
- Ubuntu/Debian:装
libsodium-dev,不是libsodium18(那是运行时库) - CentOS/RHEL:装
libsodium-devel,不是libsodium - macOS + Homebrew:装
libsodium即可,Homebrew 会同时提供头文件和库 - 自建 libsodium:编译安装后,记得
sudo make install并运行sudo ldconfig(Linux)或确认/usr/local/lib在/etc/ld.so.conf.d/下有对应条目
最麻烦的情况是容器或精简镜像(如 Alpine),得用 apk add libsodium-dev,而且要注意 Alpine 的 PHP 包通常已内置 sodium,不需要额外操作——这时候报错八成是用了非官方 PHP 镜像。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











