where(["adminid"=>$account['id']])->find(); if($has){ Db::name("admin_token")->where(["adminid"=>$account['id']])->update(["token"=>$token,"expiretime"=>date("Y-m-d H:i:s",$now+1800)]); }else{ Db::name("admin_token")->insert(["token"=>$token,"expiretime"=>date("Y-m-d H:i:s",$now+1800),"addtime"=>date("Y-m-d H:i:s"), "adminid"=>$account['id']]); } return $token; } /** * @param $token */ function verifyToken($token){ $has = Db::name("admin_token")->where(["token"=>$token])->find(); if(!$has){ return ["code"=>101,"msg"=>"token不存在"]; } if(strtotime($has['expiretime'])<=time()){ return ["code"=>102,"msg"=>"token已失效"]; } $account = Db::name("admin")->where(["id"=>$has['adminid'],"is_del"=>0])->find(); if(!$account){ return ["code"=>103,"msg"=>"未找到账户"]; } if($account['status']!=1){ return ["code"=>104,"msg"=>"账户已禁用"]; } $token_str = base64_decode($token); $account_str= substr($token_str,0,-10); if($account_str==$account['username'].$account['salt']){ Db::name("admin_token")->where(["token"=>$token])->update(["expiretime"=>date("Y-m-d H:i:s",time()+1800)]); return ["code"=>0,"msg"=>"账户有效"]; }else{ return ["code"=>105,"msg"=>"账户token无效"]; } } /** * @param $username * @return bool 账户正则匹配 */ function checkAccount($username){ $match ='/^(1745)([\d]{6})$/'; return preg_match($match,$username)?true:false; } /** * @param $pawd * @return bool 账户正则匹配 */ function checkPasswd($pawd){ $match ='/^([a-zA-z]{2})([\d]{4})$/'; return preg_match($match,$pawd)?true:false; } function UploadImg($files){ $savename = []; $files= !is_array($files) ? [$files] : $files; // var_dump($files); try{ foreach($files as $file){ $info= $file->validate(['size'=>10240000,'ext'=>'jpg,jpeg,png,bmp,gif'])->move(ROOT_PATH .'public' .DS .'upload'); if($info){ $temp = ['url'=>'upload/'. $info->getSaveName()]; $savename[]=$temp; }else{ return ""; } } return $savename; }catch (\think\exception\ValidateException $e) { return $e->getMessage(); } } function QueuePush($data,$queue="createOrderJob"){ //当前任务将由哪个类来负责处理 $jobHandlerClassName = 'app\admin\JobInv'; //业务数据 对象需要手动转序列化 $jobQueueName = $queue; $isPushed = Queue::push($jobHandlerClassName, $data,$jobQueueName); if( $isPushed !== false ){ Log::write("{$jobQueueName} 任务失败:{$data['id']}"); } } function checkRole($roleid,$menu){ $roleinfo = \think\facade\Db::name("role_action")->where([['role_id',"=",$roleid],["status","=",1]])->find(); if($roleinfo['private_data']!=""){ $private = explode(",",$roleinfo['private_data']); if(in_array($menu,$private)){ return true; } } return false; } function excelSave($fileName = '', $headArr = [], $data = []) { $objPHPExcel = new PHPExcel(); $objPHPExcel->getProperties(); $keyA = 0; // 设置表头 foreach ($headArr as $v) { $colum = PHPExcel_Cell::stringFromColumnIndex($keyA); $objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum . '1', $v); $keyA += 1; } $column = 2; $objActSheet = $objPHPExcel->getActiveSheet(); foreach ($data as $key => $rows) { // 行写入 $span = 0; foreach ($rows as $keyName => $value) { // 列写入 //判断数据是否有数组,如果有数组,转换成字符串 if(is_array($value)){ $value = implode("、", $value); } $objActSheet->setCellValue(PHPExcel_Cell::stringFromColumnIndex($span) . $column, $value); $span++; } $column++; } // var_dump($objActSheet->getActiveCell()); $file = $fileName. ".xls"; //$fileName .= "_" . date("Y_m_d", Request()->instance()->time()) . ".xls"; //$fileName = iconv("utf-8", "gb2312", $fileName); // 重命名表 $dir =ROOT_PATH. 'public/storage/report/'.date("YmdHis")."/"; if(!is_dir($dir)){ mkdir($dir,0777,true); } $objPHPExcel->setActiveSheetIndex(0); // 设置活动单指数到第一个表,所以Excel打开这是第一个表 $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save($dir . $file); // 文件通过浏览器下载 $url = $dir . $file; if(!file_exists($url)){ echo "文件生成失败"; } $saveDir = ROOT_PATH."public/storage/zip/"; if(!is_dir( $saveDir)){ mkdir($saveDir,0777,true); } $datetime = date("Y-m-d H:i:s"); $file_dir = $saveDir.$datetime.".zip"; # 5.1 文件打包,提示:使用本类,linux需开启zlib,windows需取消php_zip.dll前的注释 $zip = new \ZipArchive (); # 5.2 文件不存在则生成一个新的文件 用CREATE打开文件会追加内容至zip if ($zip->open($file_dir, \ZipArchive::OVERWRITE) !== true && $zip->open($file_dir, \ZipArchive::CREATE) !== true) echo '无法打开文件或者文件创建失败'; # 5.3 批量写入压缩包 $zip->addEmptyDir($fileName); // @$zip->addFile($v['file_path'], 'resume'.DIRECTORY_SEPARATOR.basename($headername)); @$zip->addFile($url,$fileName.DIRECTORY_SEPARATOR.basename($url)); # 5.4 关闭压缩包写入 $zip->close(); @deldir($dir); # 6. 检查文件是否存在,并输出文件 if (! file_exists ( $file_dir )) echo '简历文件不存在'; ob_clean(); flush(); header("Cache-Control: max-age=0"); header("Content-Description: File Transfer"); header('Content-disposition: attachment; filename=' . basename($file_dir)); # 处理文件名 header("Content-Type: application/octet-stream"); # 流文件输出 header("Content-Transfer-Encoding: binary"); # 告诉浏览器,这是二进制文件 header('Content-Length: ' . filesize($file_dir)); # 告诉浏览器,文件大小 readfile($file_dir); # 输出文件 @ unlink($file_dir); exit(); } function deldir($path){ //如果是目录则继续 if(is_dir($path)){ //扫描一个文件夹内的所有文件夹和文件并返回数组 $p = scandir($path); //如果 $p 中有两个以上的元素则说明当前 $path 不为空 if(count($p)>2){ foreach($p as $val){ //排除目录中的.和.. if($val !="." && $val !=".."){ //如果是目录则递归子目录,继续操作 if(is_dir($path.$val)){ //子目录中操作删除文件夹和文件 deldir($path.$val.'/'); }else{ //如果是文件直接删除 unlink($path.$val); } } } } } //删除目录 return rmdir($path); } function excelExport($fileName = '', $headArr = [], $data = []) { $objPHPExcel = new PHPExcel(); $objPHPExcel->getProperties(); $keyA = 0; // 设置表头 foreach ($headArr as $v) { $colum = PHPExcel_Cell::stringFromColumnIndex($keyA); $objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum . '1', $v); $keyA += 1; } $column = 2; $objActSheet = $objPHPExcel->getActiveSheet(); foreach ($data as $key => $rows) { // 行写入 $span = 0; foreach ($rows as $keyName => $value) { // 列写入 //判断数据是否有数组,如果有数组,转换成字符串 if(is_array($value)){ $value = implode("、", $value); } $objActSheet->setCellValue(PHPExcel_Cell::stringFromColumnIndex($span) . $column, $value); $span++; } $column++; } // var_dump($objActSheet->getActiveCell()); $fileName .= "_" . date("Y_m_d", time()) . ".xls"; //$fileName .= "_" . date("Y_m_d", Request()->instance()->time()) . ".xls"; //$fileName = iconv("utf-8", "gb2312", $fileName); // 重命名表 $objPHPExcel->setActiveSheetIndex(0); // 设置活动单指数到第一个表,所以Excel打开这是第一个表 // Redirect output to a client’s web browser (Excel2007) header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="'.$fileName.'"'); header('Cache-Control: max-age=0'); // If you're serving to IE 9, then the following may be needed header('Cache-Control: max-age=1'); // If you're serving to IE over SSL, then the following may be needed header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1 header ('Pragma: public'); // HTTP/1.0 // header("Content-Type: application/octet-stream"); # 流文件输出 // header("Content-Transfer-Encoding: binary"); # 告诉浏览器,这是二进制文件 $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save('php://output'); // 文件通过浏览器下载 exit(); }