You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP 7.2 Azure Linux/FastCGI环境下Sodium扩展函数调用失败求助

解决PHP 7.2.1中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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:03:40