ZIP下载的大小比使用PHP头的外部服务器上的实际大小要大
我们正在托管一些重文件,这些文件在我们的一个网站上被广告为免费下载。这些文件位于另一台服务器上,因此为了生成下载,我们执行以下代码:ZIP下载的大小比使用PHP头的外部服务器上的实际大小要大,php,http-headers,zip,Php,Http Headers,Zip,我们正在托管一些重文件,这些文件在我们的一个网站上被广告为免费下载。这些文件位于另一台服务器上,因此为了生成下载,我们执行以下代码: header("Cache-Control: public"); header("Content-Description: File Transfer"); header("Content-Type:application/octet-stream"); header("Content-Transfer-Encoding: binary"); header("C
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type:application/octet-stream");
header("Content-Transfer-Encoding: binary");
header("Content-Disposition:attachment;filename='$fileName'");
readfile("http://mysiste.com/downloads/$fileName");
其中,$fileName
是zip文件的名称。示例:myfile.zip
除了服务器上的myfile.zip是8Mb,它将以16Mb的速度下载之外,所有这些都可以正常工作!最疯狂的是,文件工作正常,解压文件时,里面的所有文件都是完整的,没有损坏
我猜这与头和传输编码有关,就好像zip文件失去了压缩一样
有什么想法吗
我认为你错过了一个重要的头球
标题(“内容长度:$size”)
此处。您可以使用int filesize(string$filename)
查找文件大小。这是你的电话号码
我希望这有帮助 问题是文件是服务器外部的,我不知道;I don’我想我看不懂那样的尺码。另一个问题是,如果我不指定文件的大小,为什么文件会变大?我已经更新了答案,希望能解决您的问题。请查看链接。使用
curl
可以解决您的问题!非常感谢,我修改了你的答案并添加了解决问题的最终代码。谢谢!如果您还需要进一步的帮助,请告诉我!
<?php
$fileName = "downloaded.pdf"
$size = filesize($file);
header('Content-type: application/pdf');
header("Content-length: $size");
header("Content-Disposition: attachment; filename='$fileName'");
readfile($file);
?>
$url="http://mysite/downloads/$fileName";
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true); // make it a HEAD request
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$head = curl_exec($ch);
$mimeType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
$size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
$path = parse_url($url, PHP_URL_PATH);
$filename = substr($url, strrpos($path, '/') + 1);
curl_close($ch);
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type:$mimeType");
header("Content-Disposition:attachment;filename='$fileName'");
header('Content-Length: '.$size);
readfile($url);