php - 如何使用 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 的输出要容易得多。
解决方案
将 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;
推荐阅读
- c# - 如何在 .NET Core 3.1 中调用 WCF Web 服务?
- r - 从 R 中的列表列表中删除重复项的最佳方法
- python - Django AWS S3 文件未显示在站点上
- bash - 考虑Linux中列的值将矩阵拆分为块
- javascript - LocalStorage 变量不断在两个值之间自行切换,而且没有任何原因——这是 Chrome 的错误吗?
- regex - 正则表达式:匹配两个字符之间的所有内容,除非还被不同的字符包围
- java - 如何使用 Mockito 在 Java 中通过示例模拟 ExampleMatchers
- reactjs - CORS 问题 React Axios
- haskell - 如何在字符串haskell中实现占位符
- python - 表单未在 django 中显示