php 文件上传实例
2012-07-13 14:08
513 查看
View Code
<?php /** * 文件上传类 */ class uploadFile { public $max_size = '1000000';//设置上传文件大小 public $file_name = 'date';//重命名方式代表以时间命名,其他则使用给予的名称 public $allow_types;//允许上传的文件扩展名,不同文件类型用“|”隔开 public $errmsg = '';//错误信息 public $uploaded = '';//上传后的文件名(包括文件路径) public $save_path;//上传文件保存路径 private $files;//提交的等待上传文件 private $file_type = array();//文件类型 private $ext = '';//上传文件扩展名 /** * 构造函数,初始化类 * @access public * @param string $file_name 上传后的文件名 * @param string $save_path 上传的目标文件夹 */ public function __construct($save_path = './upload/',$file_name = 'date',$allow_types = '') { $this->file_name = $file_name;//重命名方式代表以时间命名,其他则使用给予的名称 $this->save_path = (preg_match('//$/',$save_path)) ? $save_path : $save_path . '/'; $this->allow_types = $allow_types == '' ? 'jpg|gif|png|zip|rar' : $allow_types; } /** * 上传文件 * @access public * @param $files 等待上传的文件(表单传来的$_FILES[]) * @return boolean 返回布尔值 */ public function upload_file($files) { $name = $files['name']; $type = $files['type']; $size = $files['size']; $tmp_name = $files['tmp_name']; $error = $files['error']; switch ($error) { case 0 : $this->errmsg = ''; break; case 1 : $this->errmsg = '超过了php.ini中文件大小'; break; case 2 : $this->errmsg = '超过了MAX_FILE_SIZE 选项指定的文件大小'; break; case 3 : $this->errmsg = '文件只有部分被上传'; break; case 4 : $this->errmsg = '没有文件被上传'; break; case 5 : $this->errmsg = '上传文件大小为0'; break; default : $this->errmsg = '上传文件失败!'; break; } if($error == 0 && is_uploaded_file($tmp_name)) { //检测文件类型 if($this->check_file_type($name) == FALSE){ return FALSE; } //检测文件大小 if($size > $this->max_size){ $this->errmsg = '上传文件<font color=red>'.$name.'</font>太大,最大支持<font color=red>'.ceil($this->max_size/1024).'</font>kb的文件'; return FALSE; } $this->set_save_path();//设置文件存放路径 $new_name = $this->file_name != 'date' ? $this->file_name.'.'.$this->ext : date('YmdHis').'.'.$this->ext;//设置新文件名 $this->uploaded = $this->save_path.$new_name;//上传后的文件名 //移动文件 if(move_uploaded_file($tmp_name,$this->uploaded)){ $this->errmsg = '文件<font color=red>'.$this->uploaded.'</font>上传成功!'; return TRUE; }else{ $this->errmsg = '文件<font color=red>'.$this->uploaded.'</font>上传失败!'; return FALSE; } } } /** * 检查上传文件类型 * @access public * @param string $filename 等待检查的文件名 * @return 如果检查通过返回TRUE 未通过则返回FALSE和错误消息 */ public function check_file_type($filename){ $ext = $this->get_file_type($filename); $this->ext = $ext; $allow_types = explode('|',$this->allow_types);//分割允许上传的文件扩展名为数组 //echo $ext; //检查上传文件扩展名是否在请允许上传的文件扩展名中 if(in_array($ext,$allow_types)){ return TRUE; }else{ $this->errmsg = '上传文件<font color=red>'.$filename.'</font>类型错误,只支持上传<font color=red>'.str_replace('|',',',$this->allow_types).'</font> 等文件类型!'; return FALSE; } } /** * 取得文件类型 * @access public * @param string $filename 要取得文件类型的目标文件名 * @return string 文件类型 */ public function get_file_type($filename){ $info = pathinfo($filename); $ext = $info['extension']; return $ext; } /** * 设置文件上传后的保存路径 */ public function set_save_path(){ $this->save_path = (preg_match('//$/',$this->save_path)) ? $this->save_path : $this->save_path . '/'; if(!is_dir($this->save_path)){ //如果目录不存在,创建目录 $this->set_dir(); } } /** * 创建目录 * @access public * @param string $dir 要创建目录的路径 * @return boolean 失败时返回错误消息和FALSE */ public function set_dir($dir = null){ //检查路径是否存在 if(!$dir){ $dir = $this->save_path; } if(is_dir($dir)){ $this->errmsg = '需要创建的文件夹已经存在!'; } $dir = explode('/', $dir); foreach($dir as $v){ if($v){ $d .= $v . '/'; if(!is_dir($d)){ $state = mkdir($d, 0777); if(!$state) $this->errmsg = '在创建目录<font color=red>' . $d . '时出错!'; } } } return true; } }
相关文章推荐
- php下连接ftp实现文件的上传、下载、删除文件实例代码
- PHP结合jQuery插件ajaxFileUpload实现异步上传文件实例
- php封装的单文件(图片)上传类完整实例
- File, FileReader 和 Ajax 文件上传实例分析(php)
- php实例四之文件的上传
- php 上传文件实例 注册账号
- php多个文件及图片上传实例详解
- php+ajax实现图片文件上传功能实例
- PHP文件上传实例详解!!!
- 简单的php文件上传(实例)
- [PHP实例] PHP多文件上传实现
- php实现文件上传功能的代码实例
- PHP 文件上传的综合实例
- 利用discuz实现PHP大文件上传应用实例代码
- php上传文件,创建递归目录的实例代码
- Flash上传控件Swfupload php文件上传配置使用实例
- PHP上传文件程序实例
- php 单文件上传 实例
- 利用discuz实现PHP大文件上传应用实例代码
- php图片文件上传实例代码