1. 程式人生 > >創建目錄並且將數據寫入txt文件、刪除指定目錄下的文件

創建目錄並且將數據寫入txt文件、刪除指定目錄下的文件

sts mkdir != 思路 字符 函數 ech edi one

要求:將用戶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);
}

創建目錄並且將數據寫入txt文件、刪除指定目錄下的文件