我在强制浏览器下载文件时遇到问题。我找到了我的问题的解决方案:
header("Content-type: application/force-download");
header("Content-Disposition: attachment; filename=$name_of_file");
header("Pragma: no-cache");
header("Expires: 0");
readfile($name_of_file);
exit;
但在那之后,我的文件就出现在屏幕上了。即使这样也会产生同样的结果:
header('content-type: text/xml');
header('Content-Disposition: attachment;filename="$filename"');
echo "TEST";
exit;
哪里可能有问题?
不幸的是,Content-Disposition头字段的附件不受支持。这就是内容类型标题字段值更重要的原因:
如果在应用程序/八位位组流内容类型的响应中使用了[内容处置]标头,则隐含的建议是用户代理不应显示响应,而是直接输入"将响应另存为…"对话框。
尽管像应用程序/强制下载这样的未知内容类型应该被解释为像application/octet流:
预期许多其它亚型的";应用程序";将在未来进行定义。MIME实现必须至少将任何未识别的子类型视为等同于"MIME";应用程序/八位位组流";。
但您应该更安全地使用application/octet stream。
<?php
header("Content-Type: application/octet-stream");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . filesize($name_of_file));
header("Content-disposition: attachment; filename=" . $name_of_file);
readfile($name_of_file);
die();
1) 您有责任确保该文件确实存在并且是可读的
2) 可能值得在发送头之前添加ob_end_clean();
(以防您已经发送了某些内容)
编辑:根据porneL、thnx 的注释删除了无用的;
只需使用:
header('Content-Disposition: attachment');
并将其与CCD_ 3等组合以在URL中放入正确的文件名。
如果您有Apache,但没有使用mod_rewrite
,那么也可以;
http://example.com/download_script.php/nice_filename.xml
这将导致调用download_script.php
。浏览器将"看到"nice_filename.xml
作为文件名,您不需要非常混乱和不可靠的filename=…
属性。