创建目录并且将数据写入txt文件、删除指定目录下的文件

要求:将用户uid批量导出,并且每5000个放到一个txt文件中,使用英文逗号分隔用户uid;
思路:自定义一个文件夹,在每次导出的时候,先将这个文件夹中的文件删除,之后再重新导出新的文件,使用日期区分是否导出成功;一次性查出满足的所有数据,每5000条存入一个文件,可以使用array_chunk()函数分隔原始数组,之后再使用array_column()
  函数取出数组中的uid这一列的数据,最后使用import()函数将uid组合成用英文逗号分隔的字符串,存入txt文件中。
sql查询使用ThinkPHP框架方式。
//批量导出数据并且写入txt文件中

public function export_uids(){
$filepath = $_SERVER['DOCUMENT_ROOT'].'/Uploads/downuids';
//创建目录
$dir = iconv("UTF-8", "GBK", $filepath);
if (!file_exists($dir)){
mkdir ($dir,0777,true);
} else {
//文件已存在,修改权限
chmod($dir, 0777);
}
//删除文件夹下所有的文件
$this->deldir($filepath);
$presell = D('presell');
$map['p.organizationpath'] = array('EXP',"REGEXP '-3-'");
$map['p.classesid'] = array('EXP',"NOT REGEXP '5'");
$map['p.uid'] =array('NEQ',0);
$map['u.phone'] =array('NEQ','');
$map['ut.device_token'] =array('NEQ','');
$result = $presell->alias('p')->field("p.uid")->join("LEFT JOIN `user` as u ON p.uid=u.id")
->join("LEFT JOIN `user_tuisong` as ut on ut.uid = u.id")
->where($map)
->order("p.uid asc")
->select();
$res_arr = array_chunk($result,5000);//将数组每5000条数据分一组
$uids_arr = array();
foreach($res_arr as $key => $val){
$uids_arr[$key] = trim(implode(',',array_column($val,'uid')));
}
if(!empty($uids_arr) && count($uids_arr) != 0){
//写入到文件
foreach($uids_arr as $key => $val){
$filename = intval($key + 1).'-'.date('Ymd',time()).'.txt';
$fp2 = @fopen($filepath.'/'.$filename, "a");
fwrite($fp2, trim($val));
fclose($fp2);
}
echo 'success';exit;
}else{
echo '没有查询到用户数据';exit;
}
}

//删除文件夹内元素
function deldir($dir)
{
//删除目录下的文件:
$dh=opendir($dir);
while ($file=readdir($dh))
{
if($file!="." && $file!="..")
{
$fullpath=$dir."/".$file;
if(!is_dir($fullpath))
{
unlink($fullpath);
}
else
{
$this->deldir($fullpath);
}
}
}
closedir($dh);
}

转载于:https://www.cnblogs.com/lfjblog/p/10613898.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值