即时新闻

SQL Server数据库设计规范

2022年12月16日 来源:大美华赢
分享到微信
打开微信,点击底部的“发现”,
使用“扫一扫”即可将网页分享至朋友圈。

我们在项目开发过程中,经常需要动态的生成文件,并给客户下载。比如导出最新的会员数据(Excel),我们先通过查询数据库,将要导出的会员数据取出来,然后循环写入Excel文件中。又比如要打印一个会员信息表(Word文档),我们先通过查询数据库,取出该会员的记录,然后使用PHPWord来操作Word文档模板,将上面内容替换成会员的信息。

另外要注意的是,如果要处理的数据比较多,会占用比较大的缓存,如果不生成硬盘文件,基本上都导出不成功。

下面来看看具体的设计思路:

1、查询数据库,取出生成文件所需的数据。
这个不用详细讲,大家都知道怎么做。

2、写文件
写文件这一步,即可以通过各种组件,如PHPWord、PHPExcel,也可以自己写程序来写文本文件。

3、在服务器上生成临时文件
将临时文件生成到服务器上指定的目录下,临时文件最好都用time()这个变量来命名,以免重复。
代码举例:

$filename = '/Upload/export/member-info-'.time().'.docx';
$document->save('.'.$filename);
?>

4、输出到客户端
这个就简单了,直接使用header的Location进行跳转就行了。当然,这一步有一个前提,你生成的文件后缀必须在Web服务器上设置为支持下载。(即设置MineType)


header("Location: ".$filename);
?>

5、清理过期的临时文件
根据实际情况来定义多长时间为过期。例子中的z_del_file_by_ctime函数,时间的单位是分钟。具体请看代码:


//删除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动态生成文件并进行下载的设计思路,本文就介绍这么,希望对您有所帮助!

推荐阅读

友情链接 :  搜狐新闻  |  今日头条  |  腾讯新闻  |  一点资讯  |  凤凰新闻  |  网易新闻

城市 : 中国·南京

详细地址 : 南京市雨花台区

联系电话 : 18061221902

电子邮件 : hr-web100@qq.com