PHP:下载* .tar.gz文件会增加文件大小并更改MD5

时间:2014-02-26 15:33:49

标签: php http-headers md5

我需要在网站上提供可下载的* .tar.gz文件。对于每个文件,我预先生成了MD5校验和(并将它们与下载链接一起显示,以便在下载后进行检查)。但是,文件大小和MD5校验和在下载文件后都会更改。

我使用以下PHP标头等:

header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=\"".basename($filename)."\";");
header("Content-Type: application/octet-stream");
header("Content-Encoding: binary");
header("Content-Length: ".filesize($filepath.$filename));
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private");
header("Pragma: public");
ob_clean();
readfile($filepath.$filename);

使用curl直接下载文件时,我得到:

file size: 440875
MD5: f03a0995aec6f2f5f8810b635a6829b8

这是正确的!

然而,当从网站下载时,我得到:

file size: 2488320
MD5: 953db14625c978e387540b6742121309

这是问题!

我该怎么做才能改变这个?

1 个答案:

答案 0 :(得分:0)

当我遇到这个问题时,我正在使用Safari。使用其他浏览器(Chrome和Firefox),我的php标头按预期执行。

在进一步的研究中,我发现Safari必然会遇到这样的问题。在这里,我使用php重定向到我提供下载的* .tar.gz文件。使用文件的直接路径链接不会导致任何问题。只有在Safari下,文件才会被下载,并且显然会自动“解压缩”,即删除.gz扩展名并创建更大的下载文件(MD5当然不同)。

我有点失望,我测试的所有其他浏览器都做对了,而只有Safari有这个问题。