强制下载文件

时间:2012-01-26 22:39:43

标签: php file csv header

我写了一个脚本,它将数据添加到现有的csv文件中。 它也适用于其他用户,但一个用户文件不可下载只能在浏览器中打开。

写入文件时使用的标题:

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"file.csv\";" );
header("Content-Transfer-Encoding: binary");

我正在通过ajax发送一些用户选择,当它准备就绪时导航到该文件。

 $.get( urlJson ,function(){

     document.location.href = urlCsv;

  });

我认为这是服务器问题,也许某些事情没有启用,但我不知道到底是什么。

3 个答案:

答案 0 :(得分:1)

这应该这样做

<?php

$file = "data.csv";

header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Content-Type: application/force-download"); 
header("Content-Disposition: attachment; filename=".$file);
header("Content-Description: File Transfer"); 
@readfile($file); 

?>

答案 1 :(得分:0)

最简单的用PHP强制下载

 header("Content-Description: File Transfer");
 header("Content-Disposition: attachment; filename=THEFILENAME");
 header("Content-Type: application/THEFILETYPE");
 header("Content-Transfer-Encoding: binary");

用户浏览器可能只是忽略了下载文件的请求(因为它取决于浏览器要做什么),或者它可能不知道应用程序/八位字节流是什么。

您还有其他信息吗?

CSV可以是“text /逗号分隔值,text / csv,application / csv”,因为它是你试过的MIME吗?

答案 2 :(得分:0)

与@Walkerneo所说的相似...... 但是,某些版本的Internet Explorer喜欢选择对application/octet-stream执行的操作。例如,在我的一个网站上,IE总是会在媒体播放器中打开mp3文件。解决方案是在AddType mycompany/podcast mp3文件中添加.htaccess。任何类似的组合类型都会强制IE明确下载。