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

如何在CodeIgniter中导入加密SQL文件?现有恢复代码无法适配

在CodeIgniter中恢复加密SQL文件的解决方案

首先,我注意到你的问题核心是:备份时用CodeIgniter的encrypt库加密了SQL内容,但恢复代码直接读取未解密的文件,导致无法处理。下面是具体的修复步骤和代码调整:

1. 先修正备份代码的小问题(可选但重要)

看你的备份代码,你写入本地文件的是未加密的$backup,但下载给用户的是加密后的$encrypt_backup——这会导致本地保存的是明文,下载的是密文,容易混淆。如果希望本地备份也是加密的,把写入文件的代码改成:

write_file($save, $encrypt_backup);

2. 修改恢复代码:先解密再执行SQL

加密后的SQL文件不能直接按行读取(加密会破坏原有的换行结构),必须先读取整个文件内容,解密后再拆分SQL语句执行。修改后的恢复代码如下:

public function restore() { 
    // 替换成你的加密SQL文件路径
    $filename = 'C:\Users\ASUS\Desktop\backup-on-XXXX-XX-XX.sql'; 
    
    // 1. 读取整个加密文件的内容
    $encrypted_content = file_get_contents($filename);
    
    // 2. 加载encrypt库并解密内容
    $this->load->library('encrypt');
    $decrypted_sql = $this->encrypt->decode($encrypted_content);
    
    // 3. 可靠拆分SQL语句(避免字符串内的分号导致错误)
    $sql_statements = preg_split('/;\s*[\r\n]+/', trim($decrypted_sql));
    
    $this->load->model('Setting_model');
    
    // 4. 逐个执行SQL语句
    foreach ($sql_statements as $stmt) {
        $stmt = trim($stmt);
        // 跳过空语句
        if (!empty($stmt)) {
            $this->Setting_model->restore($stmt);
        }
    }
    
    $msg_info2 = 'Database successfully Restored'; 
    $this->session->set_flashdata('msg_info2', $msg_info2); 
}

关键注意事项

  • 加密密钥必须一致:确保备份和恢复时,CodeIgniter配置文件中的$config['encryption_key']完全相同,否则解密会得到乱码。
  • 加密配置保持一致:如果备份时修改过encrypt库的算法(比如$config['encryption_cipher']),恢复时也要保持相同配置。
  • 测试解密结果:可以先在代码中临时添加echo $decrypted_sql; exit;,确认解密后的内容是正常的SQL语句,再执行恢复操作,避免执行错误内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:41:54