提示将PHP动态创建的文件保存到本地计算机

时间:2013-08-10 01:17:27

标签: php javascript jquery download

我正在寻找一种方法,搜索结果会生成一个文件,可以下载并由用户保存到他们的计算机中。我已经能够生成该文件,但是它会自动存储在服务器上而不是提示用户将其存储在哪里。

在搜索表单中,用户可以选中一个复选框来生成输出的CSV文件(我希望在结果页面上只有一个下载按钮,但无法弄清楚如何操作): https://www.evernote.com/shard/s68/sh/54e95567-d91e-4649-a5c1-35b5f8929c13/a4bc4fed2a2c7f7801099f6d5711c49e

然后在下一页中,结果显示在页面上,并且还生成相应的文件。

在结果页面上生成文件的代码:

if($print_flag == 1) {
  $filename = "exportfile" . date("Y-m-d_H_m_s") . ".csv";
  $handle = fopen($filename, 'w+');
  fputcsv($handle, array($column1,$column2));
  fclose($handle);
}
如果用户选中前一个表单中的CSV复选框,则设置

$ print_flag。

这将创建一个存储在服务器上的文件,而不是允许用户在本地保存它。

我看到了之前的问题PHP save file to users computer,但无法弄清楚如何添加这些标题或者这是否是正确的方法。

谢谢!

1 个答案:

答案 0 :(得分:0)

出于这个原因,大多数浏览器都使用mime类型的标头。

通常,任何设置标头的调用都应该尽早。它们在任何echo语句之前都是命令式,并且<?php ?>块之外没有任何内容在它们之前。

您需要尽早将两行代码放入代码中:

header('Content-type: text/csv');

这告诉浏览器这是一个csv文件,并在浏览器的另存为对话框中设置过滤的文件类型。

header("Content-disposition: attachment;filename=$name.csv");

告诉浏览器提供保存文件。根据浏览器的不同,它可以弹出一个完整的另存为对话框,或者更常见的是,将文件保存到名为$name.csv的默认下载文件夹中。双引号只需设置$name即可包含文件名。