我们在项目开发过程中,经常需要动态的生成文件,并给客户下载。比如导出最新的会员数据(Excel),我们先通过查询数据库,将要导出的会员数据取出来,然后循环写入Excel文件中。又比如要打印一个会员信息表(Word文档),我们先通过查询数据库,取出该会员的记录,然后使用PHPWord来操作Word文档模板,将上面内容替换成会员的信息。
另外要注意的是,如果要处理的数据比较多,会占用比较大的缓存,如果不生成硬盘文件,基本上都导出不成功。
下面来看看具体的设计思路:
1、查询数据库,取出生成文件所需的数据。
这个不用详细讲,大家都知道怎么做。
2、写文件
写文件这一步,即可以通过各种组件,如PHPWord、PHPExcel,也可以自己写程序来写文本文件。
3、在服务器上生成临时文件
将临时文件生成到服务器上指定的目录下,临时文件最好都用time()这个变量来命名,以免重复。
代码举例:
<?php
$filename = '/Upload/export/member-info-'.time().'.docx';
$document->save('.'.$filename);
?>
4、输出到客户端
这个就简单了,直接使用header的Location进行跳转就行了。当然,这一步有一个前提,你生成的文件后缀必须在Web服务器上设置为支持下载。(即设置MineType)
<?php
header("Location: ".$filename);
?>
5、清理过期的临时文件
根据实际情况来定义多长时间为过期。例子中的z_del_file_by_ctime函数,时间的单位是分钟。具体请看代码:
<?php
//删除1天前的文件
$dir = realpath('./Upload/export');
z_del_file_by_ctime($dir, 24*60);
/*
* 删除文件夹下$n分钟前创建的文件
* @param $dir 要处理的目录,物理路径,结尾不加\
* @param $n 过期时间,单位为分钟
* @return void
*/
function z_del_file_by_ctime($dir,$n){
if(is_dir($dir)){
if($dh=opendir($dir)){
while (false !== ($file = readdir($dh))){
if($file!="." && $file!=".."){
$fullpath=$dir."/".$file;
if(!is_dir($fullpath)){
$filedate=filemtime($fullpath);
$minutes=round((time()-$filedate)/60);
if($minutes>$n)
unlink($fullpath); //删除文件
}
}
}
}
closedir($dh);
}
}
?>
好了,关于PHP动态生成文件并进行下载的设计思路,本文就介绍这么,希望对您有所帮助!
要饭二维码
洪哥写文章很苦逼,如果本文对您略有帮助,可以扫描下方二维码支持洪哥!金额随意,先行谢过!大家的支持是我前进的动力!

文章的版权
本文属于“洪哥笔记”原创文章,转载请注明来源地址:PHP动态生成文件并进行下载导出的设计思路:http://www.splaybow.com/post/php-export-download-file-7461.html
如果您在服务器运维、网络管理、网站或系统开发过程有需要提供收费服务,请加QQ:8771947!十年运维经验,帮您省钱、让您放心!
亲,如果有需要,先存起来,方便以后再看啊!加入收藏夹的话,按Ctrl+D!
发布时间:2017/5/25 7:33:34 | 编辑:洪哥 | 分类:PHP | 浏览: