php 导出 大文件,我所经历的大文件数据导出(后台执行,自动生成)

View Code

五、下载文件

文件的下载就好说了,既然已经都生成成功,下载的方法如下:

1publicfunctionexecscript_download(){2$filename = $_REQUEST['filename'];3$uid = $_REQUEST['uid'];4$file_dir = STATISTIC_EXPORT_FILE_DIR.$uid.'/'.$filename;5if (!file_exists($file_dir)){6header("Content-type: text/html; charset=utf-8");7echo "File not found!";8exit;9 } else{10ini_set("memory_limit","500M");11header('Content-Description: File Transfer');12header('Content-Type: application/octet-stream');13header('Content-Disposition: attachment; filename='.basename($file_dir));14header('Content-Transfer-Encoding: binary');15header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');16header('Cache-Control: must-revalidate,post-check=0, pre-check=0');17header('Pragma: public');18header('Content-Length: ' . filesize($file_dir));19readfile($file_dir);20}2122 }

六、上线后出现的问题

本地本来已经测试完毕,可上线后,却出现了奇怪的问题;现象描述:

当在后台点击生成文件,跳转到下载页的时候,因为下载页是显示文件进度的页面,

竟然出现有时候有刚刚点击的文件进度,有时候没有,就感觉没有生成相应的文件一样;

解决方法:

因为数据文件和进度文件都是生成在程序的某个文件夹file中,所以读取的时候都是读取的文件夹下的文件,从而判断显示进度;

后面才知道,由于后台程序有两台服务器,导致读取以及下载的时候找不到相应的文件夹,两个服务器相应的文件夹弄个共享目录就可以了

七、相应的后续优化

由于下载的文件多了,导致文件夹下的文件越来越多,而原来生成的文件是没有价值的,所以加了个定期删除文件的功能,只保留近七天的文件

当然可以用crontab,只不过我比较懒,是在点击生成文件的时候,判断了一下文件夹中的过期文件,从而删除

1publicfunctionexecscript_process_show(){2$this->load->library('smarty');3$uid = $_REQUEST['uid'];4$url_dir = STATISTIC_EXPORT_FILE_DIR.$uid .'/';//@todo5if(!is_dir($url_dir)){6 @mkdir($url_dir,0777);7}8$files = scandir($url_dir);9if(!empty($files)){10foreach ($filesas$key => $value) {11if($value!='.' && $value!='..'){12foreach ($filesas$key => $value) {13if($value!='.' && $value!='..'){14if(substr($value, 0 , 5)!="flag_"){15$filenamedate = substr($value, 0,10);16$today = date('Y-m-d',time());17$filenamedate = date('Y-m-d',strtotime($filenamedate)+(STATISTIC_FILE_EXPIRE_DAY-1)*24*3600);18if($today>$filenamedate){//文件过期19 @unlink($url_dir . $value);20 @unlink($url_dir . 'flag_' . $value);21}22}23}24}25}26}27}2829$this->smarty->assign('uid',$uid);30$this->smarty->display('interact/statistic/execscript.tpl');31 }

八、后记

大文件的导出大体就是这个样子,欢迎大家吐槽,共同交流;

当时在用命令行执行方法的时候,也参考了一下相应的资料,记录一下;

http://blog.csdn.net/yysdsyl/article/details/4636457

http://www.codesky.net/article/201202/163385.html

http://www.cnblogs.com/zdz8207/p/3765567.html

http://blog.163.com/mojian20040228@126/blog/static/4112219320097300922992/

http://php.net/manual/en/features.commandline.php

http://blog.csdn.net/yangjun07167/article/details/5603425

http://blog.csdn.net/yunsongice/article/details/5445448

http://www.cppblog.com/amazon/archive/2011/12/01/161281.aspx

http://blog.51yip.com/tag/proc_open

http://www.justwinit.cn/post/1418/

http://limboy.me/tech/2010/12/05/php-async.html

以上就介绍了我所经历的大文件数据导出(后台执行,自动生成),包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值