动态路径生成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
相关产品推荐
相关产品推荐

