我目前正在使用Zend Framework的PHP項目。我在控制器中創建一個沒有任何問題的CSV文件,但是希望用戶能夠通過單擊視圖中的按鈕來下載文件。從PHP項目的tmp文件夾下載CSV
在我.phtml
我:
<a class="btn" href="<?php echo $this->download;?>" download>Export to CSV</a>
$this->download
在控制器被設置:
$view["download"] = $this->_createCSV($bqc_jobs, $startDate, $endDate, $processor_id, $defaultTime);
的_createCSV
函數創建CSV並將其存儲在該網站所使用的臨時目錄。然後它返回文件路徑。
private function _createCSV($jobs, $start, $end, $user=null, $minutes){
$format = "Ymd_His";
if(!$start && !$user){
$start = date($format, strtoTime("-" . $minutes . " minutes"));
}
if(!$end){
$end = \DateTime::createFromFormat($format, date($format))->format($format);
}
$directory = Config::$tempDir;
$fileName = $directory . "/" . ($user ? $user . "_" : "") . ($start ? $start . "_" : "") . $end . "_report.csv";
$file = fopen($fileName, 'w');
foreach ($jobs as $job){
fputcsv($file, $job);
}
fclose($file);
return $fileName;
}
單擊按鈕時,瀏覽器會嘗試下載文件,但由於找不到文件而導致錯誤。這是有道理的,因爲瀏覽器不應該訪問臨時文件夾,但我不完全確定如何解決這個問題。
在Laravel我最近通過Streaming一個文件達到了同樣的效果 - 我做了一個快速的谷歌,遇到了這可能有助於(不熟悉zend)http://www.sasaprolic.com/2013/02/sending-stream- response-with-zend.html – Djave
@Djave看起來很有前途,謝謝 –