我正在研究允许用户使用 php 下载 pptx 和 zip 文件的脚本,但是这个脚本在不同的浏览器上表现不同。我尝试了互联网上的许多脚本,但没有一个能正常工作,所以我做了这个,从不同的脚本中收集块。
- firefox => 完美运行
- Opera => 将文件下载为 HTM 文件
- Safari => 0kb 文件
- IE => 捕获旧文件
我的代码:-
// content type for pptx file
$ctype = "application/vnd.openxmlformats-officedocument.presentationml.presentation";
$file = "http://www.abc.com/presentation.pptx";
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers
header("Content-Type: ".$ctype);
header("Content-Disposition: attachment; filename=\"".basename($file)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($file));
ob_clean();
flush();
readfile( $file);
如何让所有浏览器可靠地下载文件,而不是显示上面看似随机的行为?
编辑:下面是对我有用的代码,我不确定问题是什么,不需要的标题或文件路径?我做了两个改变并且它起作用了。
$ctype = "application/vnd.openxmlformats-officedocument.presentationml.presentation";
$file = "Presentation3.pptx";
header("Pragma: public");
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: ".$ctype);
header("Content-Disposition: attachment; filename=\"".basename($file)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($file));
readfile( $file);