目标:
我需要通过PHP创建一个CSV文件,但将下载权限限制在负责创建文件的成员。
上下文:
网站成员可以选择将他们的个人资料数据输出到CSV文件。创建的CSV文件表示存在潜在的隐私问题。我担心,如果两个成员同时创建CSV文件,重叠可能会导致一个成员的数据泄露给另一个成员。
我尝试过的:
<?php
$list = array (
array('1', '2', '3', '4'),
array('a', 'b', 'c', 'd')
);
$fp = fopen('file.csv', 'w');
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
?>
<!--File is in root-->
<a href="/file.csv">Download file.csv</a>
我的问题:
- 如何限制创建CSV文件的成员的下载访问权限
- 创建CSV文件时,成员之间是否会发生重叠,因为它本质上是一个共享文件
到目前为止,我的想法是给每个CSV文件一个唯一的名称,而不是重写同一个文件。这将解决重叠问题,尽管这些文件在浏览器中定位时仍然可以访问。我可以将CSV文件分配到受限制的文件夹,但下载后销毁文件可能更理想。
有没有更好的方法来解决这一切?
最简单的方法是将数据输出到stdout
,并在调用脚本时发送正确的标头。
例如,您有以下HTML链接:
<a href="download_csv.php">Download as CSV</a>
在download_csv.php
中,您只需执行:
$list = array (
array('1', '2', '3', '4'),
array('a', 'b', 'c', 'd')
);
// Send the proper headers
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename=results.csv');
// Open stdout instead of an actual file
$fp = fopen('php://output', 'w');
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
这将解决你的两个问题。