这是昨晚工作的,但我一定是不小心改变了一些东西,因为现在不是.
This was working last night, but I must have accidentally changed something, because it isn't now.
从这些标题中应该清楚我想要做什么:
What I am trying to do should be clear from these headers:
Content-Disposition: attachment;filename=english_customizable.xml
Location: http://tortoisewrath.com/files/2.xml
但是,当发送此标头时,Content-Disposition
部分在重定向后不起作用.
However, when this header is sent, the Content-Disposition
part doesn't work after the redirect.
...为什么?
你试图做的是不明智的检查这个问题;标头位置 + 内容处置
What you're trying to do is inadvisable check this question; Header Location + Content Disposition
Content-Disposition + Location 标头
但是您可以做到,要使其正常工作,您必须在发送之前缓冲整个响应.您可以通过输出缓冲来做到这一点
But you can do it, to make it work you will have to buffer your whole response before sending it. You can do this with output buffering
否则浏览器可能会在下载文件之前解释 Location
标头.无论哪种方式都很粗略,所以你不应该这样做.
Else the browser may interpret the Location
header before the file is downloaded. It's sketchy either way, so you shouldn't want to do this.
请注意使用 Content-Disposition: attachment;
强制另存为"将确保客户端不会去/导航任何地方,所以下面的方法无论如何,它自己应该没问题.
Please note that forcing 'save as' using Content-Disposition: attachment;
will make sure the client doesn't go/navigate anywhere, so the method below on its own should be fine in any case.
在 php 中流式传输文件
仅引用 一个聪明的人:
// 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/zh/function.header.php#107581
请注意,原始答案使用了 HTTP 中实际上不存在的 Content-Transfer-Encoding
.该来源下方的评论对此进行了解释:http://www.php.net/manual/en/function.header.php#107044
Note that the original answer used Content-Transfer-Encoding
which doesn't actually exist in HTTP. The comment below that source explains it: http://www.php.net/manual/en/function.header.php#107044
这篇关于带有 302 重定向的内容处置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!