我正在开发脚本,允许用户使用php下载pptx和zip文件,但是这个脚本在不同的浏览器上表现不同。我在互联网上尝试了很多脚本,但没有任何工作正常,所以我做了一个从不同的脚本收集块。
我的代码: -
// 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);
答案 0 :(得分:1)
在我的代码测试工作中如果使用本地文件而不是url和url给我0kb
我在firefox,IE,Chrome中测试所有结果都是一样的 // content type for pptx file
$ctype = "application/vnd.openxmlformats-officedocument.presentationml.presentation";
$file = "presentation.pptx";//attention
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);
答案 1 :(得分:1)
如果文件在您的服务器中,请不要使用URL。如果它是外部文件,我会先将它写入您的服务器,然后将其打印给用户。
我也会删除header("Cache-Control: private",false);
行;并使用header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
代替header("Expires: 0");
。它总是这样对我有用:)
同时尝试删除ob_clean(); flush();
(因为在发送文件之前无需刷新或清除)。
答案 2 :(得分:1)
请注意,IOS浏览器中存在一些问题需要下载。