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

动态路径生成Zip文件失败:请求修正优化WordPress下PHP代码

修正后的WordPress文件打包PHP代码

原代码存在多个核心问题导致动态路径下无法生成Zip文件,包括函数名拼写错误、混淆本地路径与URL路径、变量未初始化、相对路径不可靠、错误处理缺失等。以下是修正并优化后的完整代码:

function create_zip_file() {
    // 获取当前用户邮箱
    $current_user = wp_get_current_user();
    if (empty($current_user->user_email)) {
        return false; // 用户未登录或无邮箱时返回错误
    }
    $email_address = $current_user->user_email;
    $md5_address = md5($email_address);

    // 使用WordPress内置常量构建绝对路径,避免相对路径问题
    $base_local_dir = WP_CONTENT_DIR . '/myfiles/cloud/' . $md5_address . '/';
    $base_public_url = content_url('/myfiles/cloud/' . $md5_address . '/');

    // 创建目录,使用更安全的0755权限
    if (!file_exists($base_local_dir)) {
        if (!mkdir($base_local_dir, 0755, true)) {
            return false; // 目录创建失败时返回错误
        }
    }

    // 生成file.dat本地文件
    $file_dat_local_path = $base_local_dir . 'file.dat';
    if (file_put_contents($file_dat_local_path, $email_address) === false) {
        return false; // 文件写入失败时返回错误
    }

    // 初始化Zip文件的本地路径与公开URL
    $zip_local_path = $base_local_dir . 'file.zip';
    $zip_public_url = $base_public_url . 'file.zip';

    // 创建并操作Zip文件
    $zip = new ZipArchive;
    if ($zip->open($zip_local_path, ZipArchive::CREATE | ZipArchive::OVERWRITE) === true) {
        // 添加本地的file.dat文件到Zip
        $zip->addFile($file_dat_local_path, 'file.dat');
        // 生成包含用户邮箱的thanks.txt
        $zip->addFromString('thanks.txt', "Hi, Dear {$email_address} Thanks for using it!");
        $zip->close();

        // 删除临时生成的file.dat
        unlink($file_dat_local_path);
    } else {
        // Zip创建失败时清理临时文件
        if (file_exists($file_dat_local_path)) {
            unlink($file_dat_local_path);
        }
        return false;
    }

    // 验证Zip文件存在后返回公开下载URL
    return file_exists($zip_local_path) ? $zip_public_url : false;
}

调用代码保持不变:

<a href="<?php echo create_zip_file(); ?>"> Download zip file </a>

关键优化说明:

  • 绝对路径适配:用WordPress内置的WP_CONTENT_DIR(本地内容目录路径)和content_url()(对应公开URL)构建路径,彻底解决相对路径依赖问题
  • 完善错误处理:新增用户未登录/无邮箱、目录创建失败、文件写入失败、Zip创建失败的判断逻辑,避免程序静默崩溃
  • 变量逻辑修正:提前初始化Zip文件路径,修复原代码中变量未定义就使用的错误
  • 安全与规范:将目录权限从0777改为更安全的0755,同时修正字符串拼写错误(use→using)
  • 资源自动清理:当Zip创建失败时,自动删除临时生成的file.dat,避免残留垃圾文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:55:55