簡體   English   中英

在ram中寫入csv,然后將文件輸出給用戶[php]

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM