2012-01-21 56 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的解釋和示例。 –

相關問題