如何下载压缩文件的子节点之一

时间:2013-07-23 13:29:07

标签: php file download zip

我在PHP中创建一个Zipped文件,如下所示:

$nameFile = $_FILES['file']['name'];
$tmpName  = $_FILES['file']['tmp_name'];

$fp      = fopen($tmpName, 'r');
$containFile = fread($fp, filesize($tmpName));
fclose($fp);

$zip = new ZipArchive();

$fileconpress = "uploads/".$nameFile.".zip";

$conpress = $zip->open($fileconpress, ZIPARCHIVE::CREATE);
if ($conpress)
{
$zip->addFromString($nameFile, $containFile);
$zip->close();

一切都很完美。在另一个页面中,我列出了我文件夹中的所有压缩文件以及这些压缩文件中的所有子文件(通过我的数据库获取列表)。

我希望能够在压缩文件中下载其中一个孩子。如何在服务器上打开压缩文件并让用户下载其中一个?

我在php.net上查看并找到了zip_read和zip_open,但他们没有给出这么多的例子,我很难理解它是如何工作的。

2 个答案:

答案 0 :(得分:1)

php文档中有很多例子:http://php.net/manual/en/function.zip-open.php

只需打开文件,将其解压缩到一个目录,然后为您想要的服务器提供服务。这个设置让我怀疑你是否应该准备好服务器上的解压缩文件,但这是你的选择。

答案 1 :(得分:1)

$zip = new ZipArchive;
$res = $zip->open("uploads/".$parent.".zip");
if ($res === TRUE) {
    $zip->extractTo("uploads/".$parent);
    $zip->close();
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.$child.'');
    header('Pragma: no-cache');
    readfile("uploads/".$parent."/".$child);
} else {
    echo 'failed, code:' . $res;
}