使用SendFile下载/填充CSV文件

时间:2015-04-16 16:18:21

标签: php csv yii

我正在使用PHP Yii框架并尝试下载我的文件。目前,它会下载,但该文件会填充$filePath位置。为什么不正确填充我的文件?

$getData = // Getting data here.

$fileName = "file.csv";

$filePath = __Dir__ . "/.../exports";
$file = fopen($filePath . '' . $fileName, "w");
fputcsv($file, array_keys($getData[0]));
foreach ($getData as $row){
    fputcsv($file, $row);
}

    header("Content-Type: text/plain");
    header("Content-disposition: attachment; filename = $fileName");
    header("Pragma: no-cache");
    Yii::app()-> request -> sendFile($fileName, $filePath);

2 个答案:

答案 0 :(得分:1)

两件事。一,我认为你错过了/$filePath变量之间的$fileName。不应该是这样的:

$file = fopen($filePath . '/' . $fileName, "w");

其次,我认为你打电话sendFile()的方式不正确。第二个参数不应该是文件的路径。相反,它应该是应该发送到浏览器的实际内容。因此,请尝试将该行更改为:

Yii::app()->request->sendFile($fileName,  file_get_contents($filePath . '/' . $fileName));

这里,在第二个参数中,我们在$filePath . '/' . $fileName指定的路径中提供文件的内容。

答案 1 :(得分:0)

经过进一步研究,我能够解决我的错误。我需要添加file_get_contents而不是实际路径。

原件:

Yii::app()-> request -> sendFile($fileName, $filePath); 

修改:

Yii::app()-> request -> sendFile($fileName, file_get_contents($filePath . "/" . $fileName));