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

PHP使用ZipArchive生成压缩包为空,下载后无添加文件如何解决?

问题根因

你设置完下载响应头后没有输出已生成的Zip文件的实际内容,浏览器仅收到响应头无有效文件流,最终下载得到的就是空文件。

修复方案

按以下步骤调整代码:

  1. 响应头设置完成后新增Zip文件读取输出的逻辑
  2. 输出完成后终止脚本运行,避免后续多余内容污染压缩包
  3. 可按需删除临时生成的Zip文件,避免服务器残留冗余文件
  4. 多余的Content-Type头仅保留application/zip即可,避免浏览器解析异常

修复后完整代码

if($_POST['down']){
  // 清空输出缓冲区
  ob_clean();
  ob_end_flush();
  
  $zip = new ZipArchive();
  // 建议使用绝对路径,避免相对路径读写权限问题
  $filename = __DIR__ . '/images.zip';
  
  if($zip->open($filename, ZipArchive::CREATE) == FALSE){
      die('zip文件创建失败,请检查目录读写权限');
  }
  
  $string = 'wef2emfofp32fo2mfomepofm';
  $zip->addFromString('text.txt', $string);
  // 也可以用addFile方法添加本地已存在的图片等文件
  // $zip->addFile('/path/to/your/image.jpg', '自定义在压缩包里的文件名.jpg');
  $zip->close();

  // 响应头设置
  header("Content-Disposition: attachment; filename=".basename(str_replace(' ', '_', $filename)));
  header("Content-Type: application/zip");
  header("Content-Description: File Transfer");
  header("Content-Length: " . filesize($filename));

  // 核心:输出压缩包内容
  readfile($filename);
  // 可选:删除服务器上临时生成的压缩包
  unlink($filename);
  // 终止脚本,避免后续输出
  exit;
}

其他排查点

如果调整后依旧有问题,先确认PHP运行进程对指定的Zip文件生成目录有读写权限,权限不足会导致Zip文件创建失败、内容写入为空。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 22:39:04