zoukankan      html  css  js  c++  java
  • phpcms 用户修改头像

    做的项目用户的头像是存在ucenter里面,phpcms通过phpsso这个单点登录系统? 具体的我也不清楚,phpcms自带的v9_member表里没有存放用户头像的字段,如果需要修改,就要修改ucenter里的头像,

    在phpcms里读取用户头像,也需要phpsso,通过它来链接ucenter 从而获取头像。

    那么怎么通过在phpcms的控制器里,可以修改用户头像呢。

    首先分为两个部分:1.上传头像,并且保存。2.将保存的头像生成缩略图,并且在指定位置生成缩略图。

    生成的缩略图以后,上传的头像就没有用了,可以删除,生成的缩略图就用来当头像显示(很马赛克)

    代码如下:

    1.文件上传函数saveimage,2.编辑个人资料函数edit_myself()(在这里要修改头像),3.在指定位置生成缩略图do_upload_avatar() 返回值是缩略图的路径,4.初始化phpsso

    	/*  文件上传
         * @param type $file   $_FILES['image']
         * @param int $max_file_size 上传文件大小限制, 单位BYTE
         * @param string $img_folder 上传文件路径
         * @param int $imgpreview 是否生成预览图(1为生成,其他为不生成);
         * @param type $imgpreviewsize 缩略图比例
         * @return string    图片路径
         *
    	*/
    
        public function saveimage($file, $max_file_size = 500000, $img_folder = "uploadfile/", $imgpreview = 0, $imgpreviewsize = "1/3") {			//上传头像并保存,为更改个人资料里的头像做准备
                //图片扩展名设置
                $uptypes = array('image/jpg', 'image/jpeg', 'image/png', 'image/gif', 'image/bmp');
                //$file1 = $_FILES["image1"][tmp_name];//临时文件
               
                $filename = $file["tmp_name"];
                $pinfo = pathinfo($file["name"]); //array
                $ftype = $pinfo['extension']; //文件扩展名
               // var_dump($ftype);exit;
                if (!is_uploaded_file($file["tmp_name"])) {//是否存在文件
                        echo "图片不存在!";
                        exit;
                }
                // $file = $_FILES["image1"];
                // if ($max_file_size < $file["size"]) {//检查文件大小
                //         echo "文件太大!";
                //         exit;
                // }
                if (!in_array($file["type"], $uptypes)) {//检查文件类型
                        echo "文件类型不符!" . $file["type"];
                        exit;
                }
                if (!file_exists($img_folder)) {
                        mkdir($img_folder);
                }
                $img = $img_folder . time() .rand(1,100). "." . $ftype;     //图片路径加图片名 有了 时间戳和随机数 所以就不必验证文件名了,如果还能有重复的,我也很无奈啊。
    
                // if (file_exists($img)) {
                //         echo "同名文件已经存在了";
                //         exit;
                // }
                if (!move_uploaded_file($filename, $img)) {
                        echo "移动文件出错";
                        exit;
                }
               // echo $img;exit;
                return $img;
        }
    
    	public function edit_myself(){	//编辑个人资料  用到上传的头像
    		$userid = param::get_cookie('_userid');
    		$username=$_POST['username'];
    		$this->mem = pc_base::load_model('member_model');
    		$res=$this->mem->select(array('userid'=>$userid),"phpssouid");
    		$phpssouid=$res[0]['phpssouid'];
    		$avator=get_memberavatar($phpssouid);
    					//var_dump($avator);exit;
    					// echo "<pre>";
    					// var_dump($_POST); 
    					// echo "<br>";
    					//	var_dump($_FILES);exit;
    					//var_dump($res_save);exit;    //uploadimg/1494923496.jpg
    		
    		if( $_FILES['avator']['name']!='' ){
    				
    				$res_save=$this->saveimage($_FILES['avator']);
    				$ava = $this->do_upload_avatar($phpssouid,$res_save); //保存头像
    				
    			}
    			
    			//var_dump($ava);exit;
    		
    		if ($username) {
    			$mem = $this->mem->update(array('nickname'=>$username),array('userid'=>$userid)); 
    		}
    		
    		$this->personal();
    		
    	}
    
    	private function do_upload_avatar($phpssouid,$avatarurl){		//将上传的头像保存是phpsso的索洛图文件夹,并生成缩略图
    		//echo  " --1-----1";exit;
    		// 处理文件夹 开始	
    										//根据用户id给文件夹起名字
    		$dir1 = ceil($phpssouid / 10000);
    		$dir2 = ceil($phpssouid % 10000 / 1000);
    													
    		
    		//创建图片存储文件夹
    		//此处硬编码,图片强制存储到sso中
    		$avatarfile = PHPCMS_PATH.'phpsso_server/uploadfile/avatar/';
    		$dir = $avatarfile.$dir1.'/'.$dir2.'/'.$phpssouid.'/';
    		$avatar_url = APP_PATH . 'phpsso_server/uploadfile/avatar/'.$dir1.'/'.$dir2.'/'.$phpssouid.'/';
    							// echo $avatarfile;		D:workspaceprojectshaimobaophpsso_server/uploadfile/avatar/
    							// echo "-----------";
    							// echo $dir;				D:workspaceprojectshaimobaophpsso_server/uploadfile/avatar/3/1/20750/
    							// echo "--------";
    							// echo $avatar_url;		http://www.cms.localhost/phpsso_server/uploadfile/avatar/3/1/20750/
    							// exit;
    
    
    		if(!file_exists($dir)) {				//根据id创建文件夹
    			mkdir($dir, 0777, true);
    		}			
    
    		//处理文件夹 end				
    
    		$arr_url = parse_url($avatarurl);
    												// echo 1111;
    												// var_dump( $arr_url);exit;     // path 'uploadimg/1494923821.jpg
    		$filename = substr($arr_url['path'],0,1)=='/'?substr($arr_url['path'],1):$arr_url['path'];
    		$filename = substr($arr_url['path'],0,1)=='\'?substr($arr_url['path'],1):$arr_url['path'];
    
    			//	echo $filename;exit;			// uploadimg/1494923821.jpg
    		$filename = PHPCMS_PATH . $filename;
    		//echo $filename;				//	D:workspaceprojectshaimobaouploadimg/1494923889.jpg
    		
    		if( !file_exists($filename) ) return;
    		
    		//生成缩略图
    		pc_base::load_sys_class('image','','0');
    		$image = new image(1,0);
    		$image->thumb($filename, $dir.'30x30.jpg', 30, 30);
    		$image->thumb($filename, $dir.'45x45.jpg', 45, 45);
    		$image->thumb($filename, $dir.'90x90.jpg', 90, 90);
    		$image->thumb($filename, $dir.'180x180.jpg', 180, 180);
    		$aa=$image->thumb($filename, $dir.'480x480.jpg', 480, 480);
    		$this->_init_phpsso();
    		$status = $this->client->ps_updateavatar($phpssouid);
    		$avatar = $avatar_url.'480x480.jpg';
    		if( file_exists($filename) ){  //删除临时文件,只保留缩略图
    			unlink ($filename); 
    		}
    		
    		return $avatar;
    	}
    
    	/**
    	 * 初始化phpsso
    	 * about phpsso, include client and client configure
    	 * @return string phpsso_api_url phpsso地址
    	 */
    	private function _init_phpsso() {
    		pc_base::load_app_class('client', 'member', 0);
    		define('APPID', pc_base::load_config('system', 'phpsso_appid'));
    		$phpsso_api_url = pc_base::load_config('system', 'phpsso_api_url');
    		$phpsso_auth_key = pc_base::load_config('system', 'phpsso_auth_key');
    		$this->client = new client($phpsso_api_url, $phpsso_auth_key);
    		return $phpsso_api_url;
    	
    	}
    
  • 相关阅读:
    数组(Array)的使用方法
    Django中的事务操作
    什么是事务(Transaction)?事务的四个特性以及事务的隔离级别
    0.2 Django + Uwsgi + Nginx 的生产环境部署之实战篇
    0.1 Django + Uwsgi + Nginx 的生产环境部署之理论篇
    linux 进入编辑文件,保存退出相关命令
    Django--restframework
    使用用户名/邮箱/手机号 + 密码登陆 多形式登陆
    Django中异步任务---django-celery
    Redis 常用命令
  • 原文地址:https://www.cnblogs.com/benpaodelulu/p/6873490.html
Copyright © 2011-2022 走看看