PHP动态生成文件并进行下载导出的设计思路


关键词

PHP 文件 下载 导出

摘要

本文介绍PHP动态生成文件并即时下载导出的设计思路,动态生成的文件的方式不同,但生成到下载的流程相同。

我们在项目开发过程中,经常需要动态的生成文件,并给客户下载。比如导出最新的会员数据(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动态生成文件并进行下载的设计思路,本文就介绍这么,希望对您有所帮助!

 

要饭二维码

洪哥写文章很苦逼,如果本文对您略有帮助,可以扫描下方二维码支持洪哥!金额随意,先行谢过!大家的支持是我前进的动力!

文章的版权


如果您在服务器运维、网络管理、网站或系统开发过程有需要提供收费服务,请加QQ:8771947!十年运维经验,帮您省钱、让您放心!
亲,如果有需要,先存起来,方便以后再看啊!加入收藏夹的话,按Ctrl+D

« PHP使用PHPWord组件操作Word文档模板 PHP获取文件修改时间 »