| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- <?php
- /**
- 下载文件类插件
- */
- class downChajian extends Chajian{
-
- private $upobj;
- private $messign;
-
- protected function initChajian()
- {
- $this->messign = '';
- $this->upobj = c('upfile');
- }
-
- /**
- * 获取随机文件名
- */
- public function getallfilename($ext)
- {
- if(!is_dir(UPDIR))mkdir(UPDIR);
- $mkdir = ''.UPDIR.'/'.date('Y-m').'';
- if(!is_dir($mkdir))mkdir($mkdir);
- $allfilename = ''.$mkdir.'/'.date('d_His').''.rand(10,99).'.'.$ext.'';
- return $allfilename;
- }
-
- /**
- * 根据扩展名保存文件(一般邮件附件下载)
- */
- public function savefilecont($ext, $cont)
- {
- $bo = $this->upobj->issavefile($ext);
- if(isempt($cont))return;
- $file= '';
- if(!$bo){
- $file = $this->getallfilename('uptemp');
- $bo = @file_put_contents($file, base64_encode($cont));
- }else{
- $file = $this->getallfilename($ext);
- $bo = @file_put_contents($file, $cont);
- }
- if(!$bo){
- $file = '';
- }else{
- if($this->upobj->isimg($ext)){
- $bo = $this->upobj->isimgsave($ext, $file);
- if(!$bo)$file = '';
- }
- }
- return $file;
- }
-
- private function reutnmsg($msg)
- {
- $this->messign = $msg;
- return false;
- }
-
- //获取提示内容
- public function gettishi($msg1='')
- {
- $msg = $this->messign;
- if(isempt($msg))$msg = $msg1;
- return $msg;
- }
-
- /**
- * 根据内容创建文件
- */
- public function createimage($cont, $ext, $filename, $thumbnail='')
- {
- if(isempt($cont))return $this->reutnmsg('创建内容为空');
- $allfilename = $this->getallfilename($ext);
- $upses['oldfilename'] = $filename.'.'.$ext;
- $upses['fileext'] = $ext;
- @file_put_contents($allfilename, $cont);
- if(!file_exists($allfilename))return $this->reutnmsg('无法写入:'.$allfilename.'');
-
- $fileobj = getimagesize($allfilename);
- $mime = strtolower($fileobj['mime']);
- $next = 'jpg';
- if(contain($mime,'bmp'))$next = 'bmp';
- if($mime=='image/gif')$next = 'gif';
- if($mime=='image/png')$next = 'png';
- if($ext != $next){
- @unlink($allfilename);
- $ext = $next;
- $allfilename = $this->getallfilename($ext);
- $upses['oldfilename'] = $filename.'.'.$ext;
- $upses['fileext'] = $ext;
- @file_put_contents($allfilename, $cont);
- if(!file_exists($allfilename))return $this->reutnmsg('无法写入:'.$allfilename.'');
- }
-
- $filesize = filesize($allfilename);
- $filesizecn = $this->upobj->formatsize($filesize);
- $picw = $fileobj[0];
- $pich = $fileobj[1];
- if($picw==0||$pich==0){
- @unlink($allfilename);
- return $this->reutnmsg('无效的图片');;
- }
- $upses['filesize'] = $filesize;
- $upses['filesizecn'] = $filesizecn;
- $upses['allfilename'] = $allfilename;
- $upses['picw'] = $picw;
- $upses['pich'] = $pich;
- $arr = $this->uploadback($upses, $thumbnail);
- return $arr;
- }
-
- public function uploadback($upses, $thumbnail='', $subo=true)
- {
- if($thumbnail=='')$thumbnail='150x150';
- $msg = '';
- $data = array();
- if(is_array($upses)){
- $noasyn = $this->rock->get('noasyn'); //=yes就不同步到文件平台
- $noyaso = $this->rock->get('noyaso'); //=yes就不压缩
- $fileext= substr($upses['fileext'],0,10);
- $arrs = array(
- 'adddt' => $this->rock->now,
- 'valid' => 1,
- 'filename' => $this->replacefile($upses['oldfilename']),
- 'web' => $this->rock->web,
- 'ip' => $this->rock->ip,
- 'mknum' => $this->rock->get('sysmodenum'),
- //'mid' => $this->rock->get('sysmid','0'),
- 'fileext' => $fileext,
- 'filesize' => (int)$this->rock->get('filesize', $upses['filesize']),
- 'filesizecn'=> $upses['filesizecn'],
- 'filepath' => str_replace('../','',$upses['allfilename']),
- 'optid' => $this->adminid,
- 'optname' => $this->adminname,
- 'comid' => m('admin')->getcompanyid(),
- );
- $arrs['filetype'] = m('file')->getmime($fileext);
- $thumbpath = $arrs['filepath'];
- $sttua = explode('x', $thumbnail);
- $lw = (int)$sttua[0];
- $lh = (int)$sttua[1];
-
- //判断是不是需要压缩jpg和jpeg
- $compress = getconfig('imgcompress');
- if($compress && $noyaso!='yes' && ($fileext=='jpg' || $fileext=='jpeg') && $upses['picw']>0 && $upses['pich']>0){
- $sttuc = explode('x', $compress);
- $yw = (int)$sttuc[0];
- $yh = (int)arrvalue($sttuc, 1, 0);
- if($upses['picw'] > $yw || $upses['pich'] > $yh){
- $imgac = c('image', true);
- $imgac->createimg($thumbpath);
- $yspaht = $imgac->compress($yw, $yh);
- if($yspaht){
- if($thumbpath != $yspaht)unlink($thumbpath);
- $thumbpath = $yspaht;
- $arrs['filepath'] = $yspaht;
- $arrs['filesize'] = filesize($yspaht);
- $arrs['filesizecn'] = $this->upobj->formatsize($arrs['filesize']);
- }
- }
- }
-
- if($upses['picw']>$lw || $upses['pich']>$lh){
- $imgaa = c('image', true);
- $imgaa->createimg($thumbpath);
- $thumbpath = $imgaa->thumbnail($lw, $lh, 1);
- }
- if($upses['picw'] == 0 && $upses['pich']==0)$thumbpath = '';
- $arrs['thumbpath'] = $thumbpath;
-
-
- $bo = $this->db->record('[Q]file',$arrs);
- if(!$bo)$this->reutnmsg($this->db->error());
-
- $id = $this->db->insert_id();
- $arrs['id'] = $id;
- $arrs['picw'] = $upses['picw'];
- $arrs['pich'] = $upses['pich'];
- $data= $arrs;
-
- //上传到上传的文件管理2021-08-09
- if(getconfig('rockfile_autoup') && $noasyn != 'yes'){
- $stime = time()+rand(3,6);
- if($subo)$stime=0;
- c('rockqueue')->push('flow,uptofile', array('fileid'=>$id), $stime);
- }
-
- //自动上传到腾讯云存储/阿里云oss存储
- if((getconfig('qcloudCos_autoup') || getconfig('alioss_autoup')) && $noasyn != 'yes'){
- $stime = time()+rand(3,6);
- if($subo)$stime=0;
- c('rockqueue')->sendfile($id, $stime);
- }
-
- }else{
- $data['msg'] = $upses;
- }
- return $data;
- }
-
- //过滤特殊文件名
- private function replacefile($str)
- {
- $s = strtolower($str);
- $s2 = $s.'';
- $lvlaraa = explode(',','user(),found_rows,(),select*from,select*,%20,<,>');
- $s = str_replace($lvlaraa, '', $s);
- if($s!=$s2)$str = $s;
- return $str;
- }
-
- //获取扩展名
- public function getext($file)
- {
- return strtolower(substr($file,strrpos($file,'.')+1));
- }
- }
|