我使用这行代码在不同的浏览器中下载pdf文件。当我尝试使用桌面和Android浏览器时,没关系,但是当我尝试使用Ipad和iphone设备时,下载并没有发生。我不知道这段代码中是否有错误。
$local_file = $path;
$download_file = $path;
// set the download rate limit (=> 20,5 kb/s)
$download_rate = 100;
if(file_exists($local_file) && is_file($local_file))
{
/*header("Cache-Control: no-cache, must-revalidate");
header('Content-Type: application/pdf');
header('Content-Length: '.filesize($local_file));
header('Content-Disposition: filename='.$download_file);
flush();
readfile($local_file);*/
header("Content-Type: application/octet-stream");
$file = $local_file;
header("Content-Disposition: attachment; filename=" . urlencode($file_name));
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Description: File Transfer");
header("Content-Length: " . filesize($file));
flush(); // this doesn't really matter.
$fp = fopen($file, "r");
while (!feof($fp))
{
echo fread($fp, 65536);
flush(); // this is essential for large downloads
}
fclose($fp);
}else {
die('Error: The file '.$local_file.' does not exist!');
}
答案 0 :(得分:0)
首先,下载文件的建议名称应该用双引号括起来,并设置正确的内容类型(必要时才能在客户端上打开正确的查看器):
header("Content-Type: application/pdf; name=\"{$filename}\"");
header("Content-Transfer-Encoding: binary");
然后,不要在循环中阅读文件,请使用: ReadFile的($文件); 模具();
顺便说一下,在我的所有下载中,我还附加了以下标题(根据您的意图,您可以省略其中一些标题):
// to force the client to save the file, not opening it inside the browser
header("Content-Disposition: attachment; filename=\"{$filename}\"");
// disable caching on client and proxies, if the download content vary
header("Expires: 0");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
我建议您清除代码中的标题部分,并仅使用上面的前两个部分(目前不要使用内容长度)。