123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- <?php
- // +----------------------------------------------------------------------
- // | A3Mall
- // +----------------------------------------------------------------------
- // | Copyright (c) 2020 http://www.a3-mall.com All rights reserved.
- // +----------------------------------------------------------------------
- // | Author: xzncit <158373108@qq.com>
- // +----------------------------------------------------------------------
- namespace mall\basic;
- use mall\utils\Tool;
- use think\facade\Db;
- use think\facade\Config;
- use think\facade\Request;
- use think\Image;
- class Attachments {
- public static function save($name,$path,$suffix,$size,$module="",$method=""){
- if(empty($module)){
- $module = Request::param("module","","trim,strip_tags");
- }
- if(empty($method)){
- $method = Request::param("method","","trim,strip_tags");
- }
- $setting = Setting::get("upload");
- $data = [
- "type"=>$setting["type"],
- "module"=>$module,
- "method"=>$method,
- "cat_id"=>Request::param("cat_id",0,"intval"),
- "name"=>$name,
- "suffix"=>$suffix,
- "size"=>$size,
- "path"=>"/" . trim($path,"/"),
- "time"=>time()
- ];
- Db::name("attachments")->insert($data);
- return Db::name('attachments')->getLastInsID();
- }
- public static function saveFile($url="",$type=0,$module="",$method=""){
- if(empty($url)){
- throw new \Exception("图片地址不能为空");
- }
- switch ($type){
- case 0:
- $ch=curl_init();
- curl_setopt($ch,CURLOPT_URL,$url);
- curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
- curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,30);//最长执行时间
- curl_setopt($ch,CURLOPT_TIMEOUT,30);//最长等待时间
- $img=curl_exec($ch);
- curl_close($ch);
- break;
- case 1:
- ob_start();
- readfile($url);
- $img = ob_get_contents();
- ob_end_clean();
- break;
- case 2:
- $img = file_get_contents($url);
- break;
- }
- if(empty($img)){
- return "";
- }
- $path = Tool::getRootPath() . 'public';
- $filename = date("YmdHis").mt_rand(1,9999);
- $ext = explode(".",$url);
- $suffix = end($ext);
- if(!in_array($suffix,["jpg","png","gif","jpeg","bmp"])){
- return false;
- }
- $filename .= '.' . $suffix;
- $dir = '/uploads/images/' . date("Ymd") . "/";
- $file = $path . $dir . $filename;
- if(!is_dir($path . $dir)){
- mkdir($path . $dir,0777,true);
- }
- if(!function_exists("file_put_contents")){
- $fp2=@fopen($file,'a');
- fwrite($fp2,$img);
- fclose($fp2);
- }else{
- file_put_contents($file,$img);
- }
- $name = basename($filename);
- self::save(
- $name,
- $dir . $filename,
- $suffix,
- filesize($file),
- $module,$method
- );
- if(Config::get("base.is_thumb_image")){
- $thumb_image_list = Config::get("base.thumb_image_list");
- foreach($thumb_image_list as $key=>$val){
- $image = Image::open($file);
- $image->thumb($val[0], $val[1])->save(str_replace($name, $key . '_' . $name, $file));
- }
- }
- return $dir . $filename;
- }
- public static function handle($attachment_id,$id,$clear=true){
- if(empty($attachment_id)){
- return false;
- }
- $res = Db::name("attachments")->where('id','in',$attachment_id)->select()->toArray();
- foreach($res as $value){
- Db::name("attachments")->where('id',$value['id'])->update([
- "pid"=>$id
- ]);
- }
- $clear && self::clear();
- return true;
- }
- public static function clear($data=[]){
- if(empty($data)){
- $map = ["pid"=>0];
- }else{
- $map = $data;
- }
- $rs = Db::name("attachments")->where($map)->select()->toArray();
- foreach($rs as $item){
- if(Db::name("attachments")->where(["id"=>$item['id']])->delete()){
- self::deleteImage($item);
- }
- }
- return true;
- }
- public static function deleteImage($data){
- if(empty($data["path"])){
- return false;
- }
- $path = str_replace("\\",'/',trim($data["path"],"/"));
- $config = Config::get("base.thumb_image_list");
- $arr = explode("/",$path);
- $lastImage = end($arr);
- file_exists($path) && unlink($path);
- foreach($config as $key=>$val){
- $thumb = str_replace($lastImage, $key . '_' . $lastImage, $path);
- file_exists($thumb) && unlink($thumb);
- }
- return true;
- }
- public static function deleteById($id,$module="",$method=""){
- $condition = [];
- $condition[] = ["pid","=",$id];
- if(!empty($module)){
- $condition[] = ["module","=",$module];
- }
- if(!empty($method)){
- $condition[] = ["method","=",$method];
- }
- $attachments = Db::name("attachments")->where($condition)->select()->toArray();
- foreach($attachments as $val){
- if(Db::name("attachments")->where("id",$val["id"])->delete()){
- self::deleteImage($val);
- }
- }
- return true;
- }
- }
|