[英]write csv in ram and output file to user [php]
首先,我發現了一個類似的問題 ,但是如果我理解正確的話,那將無法解決問題。
我正在使用PHP
使用以下功能創建一個csv文件。
// open the file. If not existent yet, create it first
if (!file_exists($this->filename))
{
touch($this->filename);
}
$handle = fopen($this->filename, "w+");
if ($this->includeHeaders)
{
$headers = array('Company', 'Contactperson', 'Username', 'Commission', 'WinCAP Version', 'WinCAP Link', 'Contract due', 'POS Version', 'POS Link', 'Quick Select Version', 'Quick Select Link', 'Password');
fputcsv($handle, $headers);
}
// mysql-stuff here
while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))
{
fputcsv($handle, $row, ";", '"');
}
// done
fclose($handle);
如您所知,它是與TYPO3
相關的,但是這里不應該打擾。 但是,我的文件是正確生成的,包含了我需要的所有數據。 但是,該文件是在文件系統上創建的。 這意味着,具有該文件鏈接的任何人都可以下載它。
這就是我要防止的。 我當時正在考慮添加一個哈希,但這似乎並不能很好地保護它。 因此,我想到了一個主意:為什么在創建該文件之后不只是打開save-file dialog
。 這意味着該文件不應該存儲在FS上,對嗎?
我讀了一些有關output-buffer
,但是$handle
的文件是什么? PHP:\\\\出?
需要澄清的是:用戶在處理完數據並完成文件后單擊“導出”->,在瀏覽器中顯示SAVE對話框。 不要將文件保存在FS上。
只需發送文件進行下載,然后將其刪除即可。 在您的代碼之后添加以下內容:
// Send correct http headers
header('Content-Description: File Transfer');
header("Content-Type: application/csv") ;
header("Content-Disposition: attachment; filename=ChooseFilename.csv");
header("Expires: 0");
// Send file to browser
readfile($this->filename);
// delete file
unlink($this->filename);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.