【发布时间】:2010-11-22 00:58:23
【问题描述】:
在单个脚本中,我需要执行以下操作:
- 从目录中的文件创建一个 zip 文件
- 强制下载新创建的 zip
我的问题是,每当我尝试在单个脚本中执行此操作时, 下载的 zip 已损坏(文件大小还可以)。如果我触发 在两个单独的脚本调用中处理,下载的 zip 就可以了。
我想问题在于 zip 保存到文件的过程并不完全 在下载开始之前完成。奇怪的是,它并没有解决问题 在进程之间插入一个 sleep(3)... 下面的代码大纲。
如何确保压缩文件在强制下载开始前完全完成?
问候 / 乔纳斯
// 1. create a zip
$createZipFile = new CreateZipFile('temp.zip');
$createZipFile->zipDirectory('temp/', '.');
$createZipFile->saveZipFile();
sleep(3); // <-- Doesn't matter!
// 2. force zip download
$fileServer = new FileServer();
// Line below gives a corrupted zip when run in same script as 1.
$fileServer->forzeDownload('temp.zip');
【问题讨论】:
-
尝试在文本编辑器中打开损坏的 zip 文件 - 它可能会揭示出问题所在。很可能它只包含一个 404 页(显然,它不是一个格式正确的 zip 文件)。
-
您可能有一些额外的输出(可能在 PHP 块之前有一个空格/换行符)会损坏您的数据。