首页 > 解决方案 > 如何使用 file_put_contents php 为 csv 文件创建下载弹出窗口(标题)

问题描述

我想知道是否有人可以给我一些关于如何创建下载弹出窗口以及用户保存它的位置的指示。

因此,当他们单击我的“下载为 CSV”按钮时,它会提示用户在其目录中选择一个目标。

目前,我可以让下载的文件正常工作,但只有从命令行运行它。我不太确定如何用这个实现标题。

主要问题是我不能使用 fopen()、fwrite() 和 fclose(),因为我只向 csv 文件添加了一个(尽管很大)字符串。

这是一些仅在我在本地运行程序时才有效的代码。

  $output = print_r(cleanUpEntry($info), true);
  file_put_contents("output.csv", $output);

它将文件下载到与我的 PHP 文件完全相同的文件夹中,但我需要它在网页上工作,以便用户可以下载文件。

注意*我不能使用 fputcsv,因为它只适用于数组,而我的是一个多维数组,所以只获取 print_r 的输出要容易得多。

标签: phpcsv

解决方案


将 CSV 文件发送到浏览器

$output = ...
header('Content-Type: text/csv');
echo $output;
exit;

浏览器倾向于打开 CSV、PDF 等文件。要保存文件而不是打开文件,请添加 HTTP 标头Content-Disposition。对于较大的几个字节的文件,也可以使用Content-Length

强制浏览器下载文件。

$output = ...
$filename = "output.csv";
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="' . $filename . '"');
header("Content-Length: " . strlen($output));
echo $output;
exit;

发送静态文件到浏览器

您的 Web 服务器(Apache、Nginx 等)应该处理静态文件,但如果出于安全或其他原因需要通过 PHP 运行它...

$file = './files/myfile.csv';
header('Content-Type: text/csv');
readfile($file);
exit;

强制浏览器下载静态文件。

$file = './files/myfile.csv';
$filename = basename($file); // or specify directly, like 'output.csv'
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="' . $filename . '"');
header("Content-Length: " . filesize($file));
readfile($file);
exit;

推荐阅读