我需要在网站上提供可下载的*.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
这就是问题所在!
我能做些什么来改变这一点呢?
发布于 2014-03-02 06:49:30
当我遇到这个问题时,我正在使用Safari。使用其他浏览器(Chrome和Firefox),我的php头文件运行正常。
在进一步的研究中,我发现Safari必然会出现这样的问题。在这里,我使用php重定向到我提供下载的*.tar.gz文件。使用文件的直接路径链接不会导致任何问题。只有在Safari下,文件才会自动下载和“解压缩”,即删除.gz扩展名并创建一个更大的下载文件( MD5当然不同)。
令我有点失望的是,我测试的所有其他浏览器都做了正确的事情,而只有Safari有这个问题。
https://stackoverflow.com/questions/22046020
复制相似问题