PHP 7.2 Azure Linux/FastCGI环境下Sodium扩展函数调用失败求助
sodium_crypto_aead_aes256gcm_is_available()未定义的问题 看起来你遇到的问题是虽然PHPinfo显示Sodium已加载,但特定的AES-GCM相关函数无法调用——这大概率和系统libsodium库的版本以及PHP编译时的依赖关联有关,下面是具体的排查和解决步骤:
1. 先确认系统libsodium的版本
PHP 7.2中引入的sodium_crypto_aead_aes256gcm_*系列函数,依赖系统底层的libsodium库版本至少为1.0.12。如果你的系统安装的libsodium版本低于这个阈值,即使PHP的Sodium扩展显示已加载,这些函数也会缺失。
在Linux终端执行以下命令查看当前libsodium版本:
pkg-config --modversion libsodium
如果输出的版本号小于1.0.12,你需要升级libsodium:
- 对于Debian/Ubuntu系,可以添加官方PPA后升级:
sudo add-apt-repository ppa:chris-lea/libsodium sudo apt-get update sudo apt-get install libsodium-dev - 或者从源码编译安装最新版libsodium:
wget https://download.libsodium.org/libsodium/releases/libsodium-1.0.18.tar.gz tar xf libsodium-1.0.18.tar.gz cd libsodium-1.0.18 ./configure make && make check sudo make install sudo ldconfig
2. 验证PHP是否正确链接了新版本的libsodium
升级libsodium后,需要确保PHP能识别到新的库文件。可以通过以下命令查看PHP加载的libsodium版本:
php -r "echo SODIUM_LIBRARY_VERSION . PHP_EOL;"
如果输出的版本还是旧的,你需要重启PHP-FPM或者Apache(取决于你的运行环境),让PHP重新加载库文件。
如果重启后还是不行,可能需要重新编译PHP,确保编译时指定了正确的libsodium路径:
./configure --with-sodium=/usr/local/lib make && make install
3. 排除旧版Sodium扩展冲突
如果你之前手动安装过第三方的Sodium扩展(比如在PHP7.2之前的版本),可能会和PHP核心自带的Sodium扩展产生冲突。检查你的php.ini文件,看看是否有类似extension=sodium.so的手动配置,如果有,注释掉这一行,然后重启PHP服务——PHP7.2及以上版本默认会加载核心自带的Sodium,不需要手动配置扩展。
4. 验证基础Sodium功能是否正常
先测试一个基础的Sodium函数,比如生成密钥对,确认扩展本身是正常工作的:
<?php $keypair = sodium_crypto_box_keypair(); echo "基础Sodium功能正常"; ?>
如果这个脚本能正常运行,说明扩展没问题,问题确实出在AES-GCM函数依赖的libsodium版本上;如果这个也报错,那需要检查PHP的Sodium扩展是否真的正确加载了。
内容的提问来源于stack exchange,提问作者Rui Pedro

