Sodium扩展在PHP 7.4中为内置扩展,但非默认启用;需确认php -i | grep "sodium support"是否返回enabled,否则需手动安装libsodium-devel、配置PKG_CONFIG_PATH、编译sodium扩展并正确配置php.ini启用extension=sodium.so。

Sodium 扩展在 PHP 7.4 中默认已启用,无需手动安装 —— 但前提是你的 PHP 是通过主流包管理器(如 Remi、Webtatic)或宝塔面板 7.4+ 版本安装的。 如果 php -m | grep sodium 没输出,或 sodium_crypto_secretbox 报 Call to undefined function,说明扩展未加载,需手动干预。
确认 sodium 是否已编译进 PHP 或仅需启用
PHP 7.4 起,sodium 已作为「内置扩展」(bundled extension)随源码发布,多数现代发行版打包时会直接启用。判断依据有三:
- 运行
php -i | grep "sodium support",若返回sodium support => enabled,跳过后续步骤 - 检查
php -m输出中是否有sodium;没有则说明未启用或未编译 - 查看
php --ini显示的主配置文件路径,打开后搜索extension=sodium或extension_dir是否包含sodium.so
手动安装 sodium.so 的常见失败点
错误常出在 libsodium 库未被系统 pkg-config 正确识别,导致 ./configure 阶段报 No package 'libsodium' found。这不是 PHP 问题,而是底层依赖链断了:
- 用
yum install libsodium-devel(CentOS 7/8)或dnf install libsodium-devel(CentOS 8+/AlmaLinux)是最简方案;若 repo 中版本太旧(如libsodium-1.0.17),需手动编译安装并确保pkg-config能查到它 - 手动编译
libsodium后,必须执行sudo ldconfig(尤其 CentOS 7),否则动态链接器找不到libsodium.so.23等符号 -
PKG_CONFIG_PATH必须指向libsodium安装后的lib/pkgconfig/目录,例如/usr/local/lib/pkgconfig或/usr/local/libsodium/lib/pkgconfig,不能只设/usr/local/lib - 宝塔用户注意:
/www/server/php/74/bin/phpize和--with-php-config=/www/server/php/74/bin/php-config中的路径数字(74)必须与你实际使用的 PHP 版本严格一致
php.ini 中加载 sodium.so 的正确写法
不推荐硬编码完整路径,易因 PHP 升级失效。应分两步写:
立即学习“PHP免费学习笔记(深入)”;
- 先指定扩展目录:
extension_dir = "/www/server/php/74/lib/php/extensions/no-debug-non-zts-20190902/"(路径以你make install输出的实际为准) - 再启用扩展:
extension = sodium.so—— 注意不是extension = /full/path/to/sodium.so - 如果已有
[sodium]段落,删掉它;重复声明或段落格式错误会导致Module 'sodium' already loaded警告 - 改完后务必用
php --ini和php -m双重验证,别只靠宝塔面板的「重载配置」按钮
真正容易被忽略的是:即使 sodium.so 加载成功,某些旧内核(如 CentOS 7.6 之前)或容器环境缺少 getrandom() 系统调用支持,会导致 sodium_crypto_generichash 等函数随机数生成失败。此时需确认 /dev/urandom 可读且未被 seccomp 限制 —— 这类问题不会报扩展加载错误,但加密行为会静默降级或阻塞。



















