如何限制对使用PHP创建的CSV文件的下载访问?

时间:2012-01-21 17:57:51

标签: php csv

目的:

我需要通过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>

我的问题:

  1. 如何限制对创建CSV文件的成员的下载访问权限?
  2. 创建CSV文件时,成员之间是否会发生重叠,因为它本质上是一个共享文件?
  3. 到目前为止,我的想法是为每个CSV文件指定一个唯一的名称,而不是重写相同的文件。虽然在浏览器中定位时文件仍然可访问,但这将解决重叠问题。我可以将CSV文件分配给受限制的文件夹,但是下载后可能更理想的是销毁文件。

    对所有这些都有更好的方法吗?

1 个答案:

答案 0 :(得分:5)

最简单的方法是将数据输出到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);

这将解决你的两个问题。