PHP文件上传类应用

<?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(); } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值