-1

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

在搜索表单中,用户可以选择一个复选框来生成输出的 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 将文件保存到用户计算机,但无法弄清楚如何添加这些标题或者这是否是正确的方法。

谢谢!

4

1 回答 1

0

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

通常,任何设置标头的调用都应尽早进行。必须将它们放在任何 echo 语句之前,并且在它们之前的块之外没有任何东西<?php ?>

您需要尽早在代码中添加两行代码:

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

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

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

告诉浏览器提供保存文件。根据浏览器的不同,它可以弹出完整的另存为对话框,或者更常见的是,将文件保存到名为$name.csv. 双引号允许通过设置简单地包含文件名$name

于 2013-08-10T12:58:21.987 回答