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

无法创建并下载public_html外临时目录的Zip文件求助

解决PHP Zip压缩包创建与下载失败问题

核心问题分析及修复步骤

  • 文件路径错误:循环中你去掉了文件路径的../tmp/前缀,导致ZipArchive::addFile()找不到源文件,无法向压缩包添加内容,甚至直接创建失败。
    修复:直接将完整路径存入$file_names数组:

    while ($stmt->fetch()) 
    {
        $dir = '../tmp/file-'.$nom.'.pdf';
        $file_names[] = $dir; // 保留完整路径
        $i++;
    }
    
  • 临时目录权限不足:/tmp/目录需要PHP进程具备读写权限,否则无法创建Zip文件或写入内容。
    修复:检查并设置/tmp/目录权限为755(共享主机环境可尝试775),确保PHP运行用户对该目录有读写权限。

  • 下载响应头文件名错误:你在Content-disposition头中使用了完整路径作为文件名,浏览器会显示混乱的路径字符串,还可能引发路径解析问题。
    修复:仅保留文件名部分:

    header('Content-disposition: attachment; filename='.basename($archive_file_name));
    
  • 空结果判断逻辑缺陷:原代码依赖最后一次循环的$dir变量判断是否执行压缩逻辑,若查询结果为空,$dir未定义会触发警告,且逻辑不成立。
    修复:改为判断$file_names数组是否非空:

    if (!empty($file_names))
    

修正后的完整代码

$i=0;
$file_names = []; // 初始化数组,避免未定义警告
while ($stmt->fetch()) 
{
    $dir = '../tmp/file-'.$nom.'.pdf';
    $file_names[] = $dir;
    $i++;
}
$stmt->close();

if (!empty($file_names))
{
    $archive_file_name = '../tmp/files.zip';
    $zip = new ZipArchive();
    
    if ($zip->open($archive_file_name, ZIPARCHIVE::CREATE)!==TRUE) {
        exit("cannot open <$archive_file_name>");
    }
            
    foreach($file_names as $files)
    {
        // 确认文件存在再添加,避免无效操作
        if(file_exists($files)){
            $zip->addFile($files, basename($files));
        }
    }
    $zip->close();
    ob_clean();
        
    if (file_exists($archive_file_name)) {          
        header("Content-type: application/zip"); 
        header('Content-disposition: attachment; filename='.basename($archive_file_name));
        header("Content-length: " . filesize($archive_file_name));
        header("Pragma: no-cache"); 
        header("Expires: 0"); 
        readfile($archive_file_name);

    } else {
        exit("Could not find Zip file to download");
    }           
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:25:35