下载zip时的php标题问题

时间:2014-08-05 11:09:12

标签: php

我正在尝试使用以下代码让php下载.zip文件:

header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Content-Length: ' . filesize($file));
readfile($file);

$ file是对的。

我对这个脚本有两个问题:

  1. 如果我使用header('Content-Length: ' . filesize($file));下载已损坏,则为0字节文件。 如果我评论这一行,下载在ubuntu上看起来不错。

  2. 如果我使用mac OS下载此文件,打开.zip后会提取.cpgz文件(因为我读的是拉链损坏时)

  3. 我已尝试使用各种标头来完成此工作,但问题始终存在于标头上。 我的问题是:如何在所有操作系统上完成这项工作?

1 个答案:

答案 0 :(得分:0)

我使用它来使用一个通用PHP脚本下载任何类型的文件:

$base = "/path/to/downloadable/files";
$file = "myArchive.zip"; // or anything else

if(file_exists($base.$file)){        
    header('Content-Description: Download');
    header('Content-Type: '.mime_content_type($base.$file));
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
    header('Content-Transfer-Encoding: binary');
    header('Connection: Keep-Alive');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Content-Length: ' . filesize($base.$file));
    echo file_get_contents($base.$file);
}

这对我来说几乎适用于所有类型的文件(包括.zip)。