kylin 发表于 2011-3-14 11:24:19

如何删除临时文件?

我的网站提供导出报告信息成excel,然后可以供用户下载到自己电脑上的功能。

具体流程是这样:
从数据库取出相应数据->在服务器的cache文件夹里生成相应excel文件->提供下载->下载完成后删除cache文件夹里生成的临时文件
代码如下:

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save($excel_file);

//make a .zip package.
$this->load->library('zip');
$this->zip->read_file($excel_file);
$this->zip->archive($excel_file_zip);
   
   //Download the file.
$file_name = basename($excel_file_zip);
$this->zip->download($file_name);

unlink($excel_file_zip);
unlink($excel_file);

现在情况是下载功能没问题,可是下载完成后cache文件夹里的临时文件并没有被删除掉,
unlink没有起作用,是unlink的时候文件正在被下载所以不能操作的原因吗?应该怎么修改才能在用户下载完成后,把临时文件删除掉?
谢谢!

jeongee 发表于 2011-3-14 11:32:17

本帖最后由 jeongee 于 2011-3-14 11:35 编辑

貌似不用先生成,再下载吧,再删除这个流程吧
就直接将内容发送到浏览器就可以了
[*]////header("Content-Type: application/force-download");
[*]////header("Content-Type: application/octet-stream");
[*]////header("Content-Type: application/download");
[*]////header('Content-Disposition:inline;filename="'.$outputFileName.'"');
[*]////header("Content-Transfer-Encoding: binary");
[*]////header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
[*]////header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
[*]////header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
[*]////header("Pragma: no-cache");
[*]////$objWriter->save('php://output');



想方便的话
你可以使用下载辅助函数里的force_download函数

Hex 发表于 2011-3-14 11:56:35

楼上说的对,正在下载的时候你怎么删除文件啊?
所以,直接发给浏览器就完了,不用保存文件。

kylin 发表于 2011-3-14 11:58:49

我看了下Zip 编码类中已经集成了你上面说的东西,现在是我要文件在服务端先压缩好在提供给用户下载,
这样就有临时文件就要产生,现在问题怎么删除掉?
我刚才把$this->zip->download($file_name);注释掉了,发现服务器上的临时文件可以删除了。
是这个函数里有文件流没有关闭?

kylin 发表于 2011-3-14 12:45:34

谢谢,已经解决~直接发到浏览器就行了
页: [1]
查看完整版本: 如何删除临时文件?