我目前正在使用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看起来很有前途,谢谢 –