我需要在网站上提供可下载的* .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
这是问题!
我该怎么做才能改变这个?
答案 0 :(得分:0)
在进一步的研究中,我发现Safari必然会遇到这样的问题。在这里,我使用php重定向到我提供下载的* .tar.gz文件。使用文件的直接路径链接不会导致任何问题。只有在Safari下,文件才会被下载,并且显然会自动“解压缩”,即删除.gz扩展名并创建更大的下载文件(MD5当然不同)。
我有点失望,我测试的所有其他浏览器都做对了,而只有Safari有这个问题。