我正在寻找一种方法,搜索结果会生成一个文件,可以下载并由用户保存到他们的计算机中。我已经能够生成该文件,但是它会自动存储在服务器上而不是提示用户将其存储在哪里。
在搜索表单中,用户可以选中一个复选框来生成输出的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,但无法弄清楚如何添加这些标题或者这是否是正确的方法。
谢谢!
答案 0 :(得分:0)
出于这个原因,大多数浏览器都使用mime类型的标头。
通常,任何设置标头的调用都应该尽早。它们在任何echo语句之前都是命令式,并且<?php ?>
块之外没有任何内容在它们之前。
您需要尽早将两行代码放入代码中:
header('Content-type: text/csv');
这告诉浏览器这是一个csv文件,并在浏览器的另存为对话框中设置过滤的文件类型。
header("Content-disposition: attachment;filename=$name.csv");
告诉浏览器提供保存文件。根据浏览器的不同,它可以弹出一个完整的另存为对话框,或者更常见的是,将文件保存到名为$name.csv
的默认下载文件夹中。双引号只需设置$name
即可包含文件名。