技术笔记
一名已转行的程序员ThinkPHP3.23遍历(分批)处理大量数据解决方法
2021-01-31 / 代码笔记 / 583 次围观 / 0 次吐槽前言
在php开发中经常有处理大量数据的需求,但是单次读出太大数据再遍历报内存溢出报错,用ini_set('memory_limit','-1');可以避免报错,但是页面加载会很慢。很多时候也不能解决问题。
解决思路
给数据库中每条记录加上一个处理状态的字段status = 0 。【0=>表示未处理,1=>表示已处理】
分批按status = 0条件查询数据并处理,处理完成修改记录status = 1。
浏览器挂机执行即可。
应用场景
需要定时处理的各种需求,比如结算。
处理大量数据时服务器跑不动的情况。
实现代码
public function test(){ // ini_set('memory_limit','-1');//设置脚本内存限制 -1表示不限制 // set_time_limit(0);//设置最大脚本运行时间 0为不限制 $User = M("User"); // 实例化User对象 $user = $User->where('status=0')->limit(0,1)->select(); //定义查询条件 通过limit来限制每次处理条数 if(!empty($user)){ foreach($invest as $i){ /* 这里编写处理数据代码 */ $User->where('id='.$i['id'])->setField('status',1);//修改该记录处理状态 } }else{ echo '处理完成'; } //这里控制每次执行时间 浏览器自动刷新执行下一批数据 $url = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . '?' . $_SERVER['QUERY_STRING']; echo '<script type="text/javascript"> setInterval(refresh,1000) function refresh(){ window.location.href = "' . $url . '"; } </script>'; }
Powered By Z-BlogPHP
Copyright 技术笔记 Rights Reserved.
额 本文暂时没人评论 来添加一个吧
发表评论