这是昨晚的工作,但我必须不小心改变了一些东西,因为它现在不是。
我想要做的事情应该从这些标题中清楚:
Content-Disposition: attachment;filename=english_customizable.xml
Location: http://tortoisewrath.com/files/2.xml
但是,当发送此标头时,Content-Disposition
部分在重定向后无效。
...为什么?
答案 0 :(得分:2)
你想要做的是不可取的检查这个问题; Header Location + Content Disposition
内容处理+位置标题
但是你可以做到,为了使它工作,你必须在发送之前缓冲整个响应。您可以使用输出缓冲
来完成此操作否则浏览器可能会在下载文件之前解释Location
标题。这两种方式都很粗略,所以你不应该这样做。
请注意强制使用Content-Disposition: attachment;
“保存为”将确保客户端不会在任何地方进行导航,因此下面的方法本身应该没问题。
在php中播放文件
引用a guy who has his brains in the right place:
// To use header() with 'content-type', why don't you use mime_content_type() function rather than checking the type on the basis of extension?
// Example code:
<?php
$file="test.docx";
header("Pragma: public");
header('Content-disposition: attachment; filename='.$file);
header("Content-type: ".mime_content_type($file));
header('Content-Encoding: identity');
ob_clean();
flush();
readfile($file);
?>
// Use $file to map to whichever type of file.
// Note: the mime types should already be defined in apache settings
来源:http://www.php.net/manual/en/function.header.php#107581
请注意,原始答案使用的是Content-Transfer-Encoding
,它实际上并不存在于HTTP中。该来源下面的评论解释了它:http://www.php.net/manual/en/function.header.php#107044