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

Phpseclib类加载失败求助:Composer自动加载未生效问题排查

问题描述

我按照安装说明创建文件夹、运行Composer,获取到lock文件与vendor目录后部署至GoDaddy服务器。编写了包含Decrypt函数的PHP文件,引入vendor/autoload.php后出现PHP Fatal error: Uncaught Error: Class未找到错误。尝试手动引入Rijndael.php后,又出现BlockCipher相关报错,我知道这并非正确做法,疑惑为何自动加载未生效。

原代码

<?php
require __DIR__ . '/vendor/autoload.php';
$ky = '2345678901234567890123456789012'; // 32 * 8 = 256 bit key
$iv = '2345678901234567890123456789012'; // 32 * 8 = 256 bit iv

function Decrypt($string_to_decrypt)
{
    global $ky;
    global $iv;
    
    $cipher = new Crypt_Rijndael(CRYPT_RIJNDAEL_MODE_CBC);
    $cipher->setBlockLength(256);
    $cipher->setKeyLength(256);
    $cipher->setKey($ky);
    $cipher->setIV($iv);

    $rtn= $cipher->decrypt($string_to_decrypt);
    error_log('decrypt = '. $rtn, 0);

    return($rtn);
}

手动引入代码

include('/home/n28d5aun99s6/public_html/Working/vendor/phpseclib/phpseclib/phpseclib/Crypt/Rijndael.php');
问题原因与解决办法
  • 命名空间未正确使用:phpseclib 2.x及以上版本采用命名空间机制,Crypt_Rijndael是1.x版本的类名写法,新版本类位于phpseclib\Crypt命名空间下。修改代码如下:

    <?php
    require __DIR__ . '/vendor/autoload.php';
    // 引入命名空间
    use phpseclib\Crypt\Rijndael;
    
    $ky = '2345678901234567890123456789012';
    $iv = '2345678901234567890123456789012';
    
    function Decrypt($string_to_decrypt)
    {
        global $ky;
        global $iv;
        
        // 使用命名空间下的类
        $cipher = new Rijndael(Rijndael::MODE_CBC);
        $cipher->setBlockLength(256);
        $cipher->setKeyLength(256);
        $cipher->setKey($ky);
        $cipher->setIV($iv);
    
        $rtn= $cipher->decrypt($string_to_decrypt);
        error_log('decrypt = '. $rtn, 0);
    
        return $rtn;
    }
    
  • autoload.php路径错误:验证__DIR__ . '/vendor/autoload.php'是否指向正确的文件路径。可以添加调试代码确认:

    $autoloadPath = __DIR__ . '/vendor/autoload.php';
    if (!file_exists($autoloadPath)) {
        die("自动加载文件不存在:{$autoloadPath}");
    }
    require $autoloadPath;
    

    若路径错误,根据实际目录结构调整,比如文件在子目录时可能需要__DIR__ . '/../vendor/autoload.php'。

  • Composer自动加载缓存未更新:部署后在服务器上执行以下命令重新生成自动加载映射:

    cd /home/n28d5aun99s6/public_html/Working
    composer dump-autoload
    
  • 版本兼容问题:如果你的代码是为phpseclib 1.x编写的,可指定安装兼容版本:

    composer require phpseclib/phpseclib:^1.0
    

    但建议优先适配新版本,1.x已停止维护,存在安全风险。

内容的提问来源于stack exchange,提问作者Clint Garrity

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:30:55