php – 使用302重定向的Content-Disposition

这是在昨晚工作,但我必须意外地改变了一些东西,因为它现在不是.

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

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

但是,当发送此标头时,重定向后Content-Disposition部分不起作用.

…为什么?

最佳答案
你要做的是不建议检查这个问题; Header Location + Content Disposition

Content-Disposition Location标头

但你可以做到,为了使它工作,你必须在发送之前缓冲你的整个响应.您可以使用输出缓冲来完成此操作

> http://php.net/manual/en/book.outcontrol.php

否则,浏览器可能会在下载文件之前解释位置标头.这两种方式都很粗略,所以你不应该这样做.

请注意,使用内容处理强制“另存为”:附件;将确保客户端不会去任何地方/导航,所以下面的方法本身应该没问题.

在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

转载注明原文:php – 使用302重定向的Content-Disposition - 代码日志