私は現在、Zend Frameworkを使用しているPHPプロジェクトに取り組んでいます。コントローラで問題なくCSVを作成していますが、ユーザーがビュー内のボタンをクリックしてファイルをダウンロードできるようにします。私が持っている私の.phtml
でPHPプロジェクトのtmpフォルダからCSVをダウンロード
:
<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;
}
ボタンをクリックすると、ブラウザはファイルのダウンロードを試みますが、ファイルが見つからないためにエラーが発生します。ブラウザーは一時フォルダーにアクセスする必要がないので、これは理にかなっていますが、これを回避する方法は完全にはわかりません。
私は最近、ファイルをストリーミングすることによってまったく同じことを達成しました - 私は素早くGoogleをやって、これを助けてくれるかもしれません(Zendに慣れていない)http://www.sasaprolic.com/2013/02/sending-stream- respond-with-zend.html – Djave
@Djaveは有望ですね、ありがとうございます –