PHP技术

当前位置:首页 > PHP技术 >

PHP文件上传类实例讲解

时间:2015-10-28        阅读:次        QQ群:182913345

        这个文件上传类可以自定上传文件大小与上传文件类型及文件保存地址,在使用过程中有一个问题就是如果是中文文件名进行上传就会出现乱码,所以大家解决办法就是把页面保存成uft8即可解决。
 
下面就是为大家分享的代码:

<?php
	define('NO_FILE', '不存在上传文件');
	define('NOT_ALLOW_EXT', '文件类型不在允许范围内');
	define('NOT_ALLOW_SIZE', '文件大小不在允许范围内');
	define('HAS_THE_FILE', '该文件已经存在');
	define('UPLOAD_FAILED', '上传失败');
	define('UPLOAD_SUCCESS', '上传成功');
	
	class file_uploader{
	  var $_file;
	  var $_filesize;
	  var $_fileext;
	  var $_filedir;
	  var $_filename;
	  var $_filetmpname;
	   
	  var $allowsize;
	  var $allowext;
	   
	  var $neednewname;
	  var $newname;
	  var $syslang;
	   
	  var $report;
	  
	 /*
	  *第一个参数$dir 为上传文件存放的路径
	  *第二个参数为$_FILES 为你那个上传文件变量
	  *第三个参数允许文件大小 单位为MB
	  *第四个参数允许的文件类型 格式为jpg|png|gif
	  *第五个参数是否需要生成新的文件名
	  *第六个参数为返回的提示格式 0为直接提示上传正确 1则返回一个数组array('filename' => $filename, 'filesize' => $this->_filesize, 'tip' => UPLOAD_SUCCESS);
	 */
	  function ready($filedir = '', $file, $allowsize = '', $allowext = '', $neednewname = false, $report = 0){
		$this->_filedir = is_dir($filedir) ? $filedir : '';
		if(empty($file) || !isset($file['size']) || $file['size'] == 0) $this->error(NO_FILE);
		$this->_filesize = $file['size'];
		$this->_filename = $file['name'];
		$this->_filetmpname = $file['tmp_name'];
		 
		$this->allowsize = $allowsize;
		$this->allowext = $allowext;
		 
		$this->neednewname = ($neednewname) ? true : false;
		$this->newname = '';
		 
		$this->report = $report;
	  }
	   
	  function do_upload(){
		if(!is_uploaded_file($this->_filetmpname)) $this->error(NO_FILE);
		if($this->chk_ext()){
		  $this->error(NOT_ALLOW_EXT);
		  return '';
		}
		if($this->chk_size()){
		  $this->error(NOT_ALLOW_SIZE);
		  return '';
		}
		if($this->neednewname) $this->newname = $this->generate_name().".".$this->get_fileext();
		if($this->chk_hasfile()){
		  $this->error(HAS_THE_FILE);
		  return '';
		}
		$filename = empty($this->newname) ? @iconv('utf-8','gb2312',$this->_filename) : $this->newname;
		@chmod($this->_filedir.$filename, 0777);
		if(move_uploaded_file($this->_filetmpname, $this->_filedir.$filename)){
		  return $this->result();
		}else{
		  $this->error(UPLOAD_FAILED);
		  return '';
		}
	  }
	   
	  function chk_ext(){
		if(empty($this->allowext) || in_array($this->get_fileext(), explode("|",$this->allowext))) return false;
		return true;
	  }
	   
	  function chk_size(){
		if(empty($this->allowsize) || get_filesize <= $this->allowsize*1024*1024) return false;
		return true;
	  }
	   
	  function get_filesize(){
		return $this->_filesize;
	  }
	   
	  function get_fileext(){
		return substr($this->_filename,strrpos($this->_filename,".")+1);
	  }
	   
	  function generate_name(){
		return substr(md5(time()),26);
	  }
	   
	  function chk_hasfile(){
		return is_file($this->_filedir.$this->_filename);
	  }
	   
	  function error($tip){
		echo $tip;
	  }
	   
	  function result(){
		if($this->report){
		  $filename = empty($this->newname) ? $this->_filename : $this->newname;
		  $arr = array('filename' => $filename, 'filesize' => $this->_filesize, 'tip' => UPLOAD_SUCCESS);
		  return $arr;
		}else{
		  return UPLOAD_SUCCESS;
		}
	  }
	}

调用方法:

$dir = 'upload/';
require("upload_class.php");
$u = new file_uploader;
$u->ready($dir, $_FILES['upload_file'], false, false, true, 0);
echo $u->do_upload();

补充说明:在编码上面还是有些问题,自己是在utf8的页面将数据进行提交的,所以生成的文件如果保持原来的中文名字的话在文件夹中看到就是乱码的名字,如果不想出现乱码的话需要进行一下编码的转换。

上一篇:PHP实现统计在线人数的方法

下一篇:PHP根据经纬度计算两地距离

扫一扫,更多精彩内容推送

PHP技术分享

分享PHP技术,前端技术,数据库,SEO优化,服务器,网络安全等知识,是php程序员工作学习的好帮手!

Copyright © 2013-2015.PHP技术分享 www.php520.cn  版权所有  网站地图    PHP学习交流群

免责声明:网站内容收集于互联网,本网站不承担任何由于内容的合法性及健康性所引起的争议和法律责任。

欢迎大家对网站内容侵犯版权等不合法和不健康行为进行监督和举报。 沪ICP备15014499号-2