将CSV文件下载到本地下载文件夹

时间:2013-10-30 17:22:59

标签: php csv

我有一个php文件,它将表单数据转换为csv格式,然后它会自动下载到用户的本地下载文件夹。

$time = time();
$filename = 'exceldownloads/myreport_'.$time.'.csv';
$file = fopen($filename,'w');
fputcsv($file,$rowexcel);

上面的代码工作正常,并将csv文件存储在服务器的指定文件夹中。但我的要求是将其下载到本地文件夹。我已经看到了上述问题的许多解决方案,但只有当我们知道本地目标文件夹时它们才能正常工作。但是,我的要求是将其下载到最终用户本地下载的文件夹(其下载位置我不知道)。无论如何都要将其下载到最终用户系统而不特别提及目标路径。

1 个答案:

答案 0 :(得分:2)

您可以将网页的输出导出为附件,该附件将显示为下载给用户。您可以在向用户输出任何输出之前输出适当的标题来执行此操作。

这是一个示例,它创建了一个名为foo.csv的CSV文件下载:

header("Content-type: text/csv");
header("Content-Disposition: attachment;Filename=foo.csv");

输出标题后,您只需将所有文件的数据输出到页面内容。

* 编辑:* 根据要求,这是一个工作代码段:

header("Content-type: text/csv");
header("Content-Disposition: attachment;Filename=foo.csv");
echo implode(";", $rowexcel) . "\r\n";  // you should expand this accordingly

或者,这是另一个代码段,基于您的代码:

$filename = 'myreport'.time().'.csv';
$f = fopen($filename,'w');
fputcsv($f,$rowexcel);
header('Content-type: application/csv');
header('Content-Disposition: attachment;filename="'.$filename.'"');
readfile($filename);

如果您没有下载任何内容,请确保在header()调用之前不输出任何内容。另外,请确保PHP文件开头没有任何UTF8 BOM字节,因为这些字节可能会被误解为输出