2012-01-21 50 views
1

目标:

我需要通过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文件时会发生成员之间的重叠,因为它本质上是一个共享文件?

我的想法到目前为止是给每个CSV文件一个唯一的名称,而不是重写相同的文件。这将解决重叠问题,尽管在浏览器中定位文件仍然可以访问。我可以将CSV文件分配到受限制的文件夹,但在下载文件后可能会更理想。

有没有比这更好的方法?

回答

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); 

这会解决您的两个问题。

+0

我测试过了,效果很好。感谢您使用stdout的解释和示例。 –