Content-Disposition with 302 redirect

时间:2012-06-22 19:53:22

标签: php http redirect header content-disposition

这是昨晚的工作,但我必须不小心改变了一些东西,因为它现在不是。

我想要做的事情应该从这些标题中清楚:

Content-Disposition: attachment;filename=english_customizable.xml
Location: http://tortoisewrath.com/files/2.xml

但是,当发送此标头时,Content-Disposition部分在重定向后无效。

...为什么?

1 个答案:

答案 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