PHP文件上传类应用
2015-09-09 13:58
591 查看
<?php /** * 步骤: * 1.导入inlcude本类文件,如下函数upload 配置存储路径 * 2.直接运用,配合前台,运行函数,注意前台form打开enctype * 3.若运行成功,转运文件至指定目录,获得返回值url物理全路径 * 4.把指定存储的路径存入数据库 */ /** * 文件上传函数,把文件保存到指定路径 * @param * $filename:表单里写的文件名称 name="XXX" ,会自动识别$_FILES * @return 成功返回图片存储物理全路径,失败返回false */ function upload($filename){ include_once(__ROOT__.'/common/Upload.class.php');//引入类文件 $path = __ROOT__."/public/upload/".date("Y-m-d",time());//定义路径 $upload = new upload($filename,$path);//实例化对象 $url = $upload->uploadFile();//调用成员方法,成功返回保存的物理地址 if(empty($url)){ return false; } return $url; } /** * 修改会员信息 * @param $id 哪位会员 $data修改的值[数组形式] * @return 成功返回影响行数 ;失败返回false */ function update_user($id,$data){ $info = get_user($id);//查询出此友情链接的信息 //判断有删除图片操作,清空图片地址 if(@$data['del_pic']){ unlink(__ROOT__.'/public/'.$info['user_img']); unset($data['del_pic']); $data['user_img'] = " "; } if(!empty($_FILES['user_img']['name'])){ @unlink(__ROOT__."/public/".$info['user_img']);//先删除原来文件exit; $url = upload('user_img');//移动文件 if($url === false){ return false; } $data['user_img'] = strstr($url,"upload");//赋新地址值 } $user = M('cms_user'); $data['password'] = md6($data['password'] ); $where = " user_id = $id "; $re = $user->where($where)->data($data)->update(); // echo $link->getLastSql();exit; if($re){ return true; } return false; } //--------------------------以上为类的应用方法---------------------- //------------------------------类开始----------------------------- class Upload{ protected $fileName; //文件名称 protected $maxSize; //文件最大大小 protected $allowMime; //允许的图片范围 protected $allowExt; //允许的文件后缀名 protected $uploadPath; //设置文件上传路径 protected $imgFlag; //是否开启检测真实图像 protected $fileInfo; protected $error;//返回的文件错误 protected $ext; //获取的文件后缀 public function __construct($fileName='myFile',$uploadPath='./uploads',$imgFlag=true,$maxSize=5242880,$allowExt=array('jpeg','jpg','png','gif'),$allowMime=array('image/jpeg','image/png','image/gif')){ $this->fileName=$fileName; $this->maxSize=$maxSize; $this->allowMime=$allowMime; $this->allowExt=$allowExt; $this->uploadPath=$uploadPath; $this->imgFlag=$imgFlag; $this->fileInfo=$_FILES[$this->fileName]; } /** * 检测上传文件是否出错 * @return boolean */ protected function checkError(){ if(!is_null($this->fileInfo)){ if($this->fileInfo['error']>0){ switch($this->fileInfo['error']){ case 1: $this->error='超过了PHP配置文件中upload_max_filesize选项的值'; break; case 2: $this->error='超过了表单中MAX_FILE_SIZE设置的值'; break; case 3: $this->error='文件部分被上传'; break; case 4: $this->error='没有选择上传文件'; break; case 6: $this->error='没有找到临时目录'; break; case 7: $this->error='文件不可写'; break; case 8: $this->error='由于PHP的扩展程序中断文件上传'; break; } return false; }else{ return true; } }else{ $this->error='文件上传出错'; return false; } } /** * 检测上传文件的大小 * @return boolean */ protected function checkSize(){ if($this->fileInfo['size']>$this->maxSize){ $this->error='上传文件过大'; return false; } return true; } /** * 检测扩展名s * @return boolean */ protected function checkExt(){ $this->ext=strtolower(pathinfo($this->fileInfo['name'],PATHINFO_EXTENSION)); if(!in_array($this->ext,$this->allowExt)){ $this->error='不允许的扩展名'; return false; } return true; } /** * 检测文件的类型 * @return boolean */ protected function checkMime(){ if(!in_array($this->fileInfo['type'],$this->allowMime)){ $this->error='不允许的文件类型'; return false; } return true; } /** * 检测是否是真实图片 * @return boolean */ protected function checkTrueImg(){ if($this->imgFlag){ if(!@getimagesize($this->fileInfo['tmp_name'])){ $this->error='不是真实图片'; return false; } return true; } } /** * 检测是否通过HTTP POST方式上传上来的 * @return boolean */ protected function checkHTTPPost(){ if(!is_uploaded_file($this->fileInfo['tmp_name'])){ $this->error='文件不是通过HTTP POST方式上传上来的'; return false; } return true; } /** *显示错误 */ protected function showError(){ exit('<span style="color:red">'.$this->error.'</span>'); } /** * 检测目录不存在则创建 */ protected function checkUploadPath(){ if(!file_exists($this->uploadPath)){ mkdir($this->uploadPath,0777,true); } } /** * 产生唯一字符串 * @return string */ protected function getUniName(){ return md5(uniqid(microtime(true),true)); } /** * 上传文件 * @return string */ public function uploadFile(){ if($this->checkError()&&$this->checkSize()&&$this->checkExt()&&$this->checkMime()&&$this->checkTrueImg()&&$this->checkHTTPPost()){ $this->checkUploadPath(); $this->uniName=$this->getUniName(); $this->destination=$this->uploadPath.'/'.$this->uniName.'.'.$this->ext; if(@move_uploaded_file($this->fileInfo['tmp_name'], $this->destination)){ return $this->destination; }else{ $this->error='文件移动失败'; $this->showError(); } }else{ $this->showError(); } } }
相关文章推荐
- php实现发送邮件
- PHP重定向的具体实现方式
- php注册+验证码
- PHP中this,self,parent的区别
- Laravel框架下创建命令行文件
- phpmyadmin基本功能已禁用的解决办法
- PHP中的一些边角料
- PHP开发中调试日志生成方法
- yii2安装 程序模板安装
- PHP版消灭星星实现算法
- PHP用文件锁模拟进程锁
- PHP heredoc技术
- php的异常处理 try catch
- RTP头简介
- thinkphp phpexcel使用
- 【ThinkPHP】ThinkPHP对Mysql数据库的增删改查,volist标签附带条件判断的用法
- PHP库收集
- PHP register_shutdown_function函数详解
- PHP:字符串转数组,数组转字符串;字符串截取、替换、查找
- php单例模式实现对象只被创建一次