≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 网络编程 > PHP笔记

php 完全封装好上传文件类功能实例

人气:676 时间:2018-09-22

这篇文章主要为大家详细介绍了php 完全封装好上传文件类功能实例,具有一定的参考价值,可以用来参考一下。

对完全封装好的php上传文件类感兴趣的小伙伴,下面一起跟随四海网的小编两巴掌来看看吧!

/**
 * 完全封装好的php上传文件类
 *
 * @param 
 * @arrange 512-笔记网: www.q1010.com
 **/
class FileUpload {
	private $filepath; //指定上传文件保存的路径
	private $allowtype=array('gif', 'jpg', 'png', 'jpeg'); //充许上传文件的类型
	private $maxsize=1000000; //允上传文件的最大长度 1M
	private $israndname=true; //是否随机重命名, false不随机,使用原文件名
	private $originName; //源文件名称
	private $tmpFileName; //临时文件名
	private $fileType; //文件类型
	private $fileSize; //文件大小
	private $newFileName; //新文件名
	private $errorNum=0; //错误号
	private $errorMess=""; //用来提供错误报告
	//用于对上传文件初使化
	//1. 指定上传路径, 2,充许的类型, 3,限制大小, 4,是否使用随机文件名称
	//让用户可以不用按位置传参数,后面参数给值不用将前几个参数也提供值
	function __construct($options=array()){
	foreach($options as $key=>$val){
	$key=strtolower($key);
	//查看用户参数中数组的下标是否和成员属性名相同
	if(!in_array($key,get_class_vars(get_class($this)))){
	continue;
	}
	$this->setOption($key, $val);
	}
	}
	private function getError(){
	$str="上传文件<font color='red'>{$this->originName}</font>时出错:";
	switch($this->errorNum){
	case 4: $str .= "没有文件被上传"; break;
	case 3: $str .= "文件只被部分上传"; break;
	case 2: $str .= "上传文件超过了HTML表单中MAX_FILE_SIZE选项指定的值"; break;
	case 1: $str .= "上传文件超过了php.ini 中upload_max_filesize选项的值"; break;
	case -1: $str .= "末充许的类型"; break;
	case -2: $str .= "文件过大,上传文件不能超过{$this->maxSize}个字节"; break;
	case -3: $str .= "上传失败"; break;
	case -4: $str .= "建立存放上传文件目录失败,请重新指定上传目录"; break;
	case -5: $str .= "必须指定上传文件的路径"; break;
	default: $str .= "末知错误";
	}
	return $str.'<br>';
	}
	//用来检查文件上传路径
	private function checkFilePath(){
	if(empty($this->filepath)) {
	$this->setOption('errorNum', -5);
	return false;
	}
	if(!file_exists($this->filepath) || !is_writable($this->filepath)){
	if(!@mkdir($this->filepath, 0755)){
	$this->setOption('errorNum', -4);
	return false;
	}
	}
	return true;
	}
	//用来检查文件上传的大小
	private function checkFileSize() {
	if($this->fileSize > $this->maxsize){
	$this->setOPtion('errorNum', '-2');
	return false;
	}else{
	return true;
	}
	}
	//用于检查文件上传类型
	private function checkFileType() {
	if(in_array(strtolower($this->fileType), $this->allowtype)) {
	return true;
	}else{
	$this->setOption('errorNum', -1);
	return false;
	}
	}
	//设置上传后的文件名称
	private function setNewFileName(){
	if($this->israndname){
	$this->setOption('newFileName', $this->proRandName());
	} else {
	$this->setOption('newFileName', $this->originName);
	}
	}
	//设置随机文件名称
	private function proRandName(){
	$fileName=date("YmdHis").rand(100,999);
	return $fileName.'.'.$this->fileType;
	}
	private function setOption($key, $val){
	$this->$key=$val;
	}
	//用来上传一个文件
	function uploadFile($fileField){
	$return=true;
	//检查文件上传路径
	if(!$this->checkFilePath()){
	$this->errorMess=$this->getError();
	return false;
	}
	$name=$_FILES[$fileField]['name'];
	$tmp_name=$_FILES[$fileField]['tmp_name'];
	$size=$_FILES[$fileField]['size'];
	$error=$_FILES[$fileField]['error'];
	if(is_Array($name)){
	$errors=array();
	for($i=0; $i<count($name); $i++){
	if($this->setFiles($name[$i], $tmp_name[$i], $size[$i], $error[$i])){
	if(!$this->checkFileSize() || !$this->checkFileType()){
	$errors[]=$this->getError();
	$return=false;
	}
	}else{
	$error[]=$this->getError();
	$return=false;
	}
	if(!$return)
	$this->setFiles();
	}
	if($return){
	$fileNames=array();
	for($i=0; $i<count($name); $i++){
	if($this->setFiles($name[$i], $tmp_name[$i], $size[$i], $error[$i])){
	$this->setNewFileName();
	if(!$this->copyFile()){
	$errors=$this->getError();
	$return=false;
	}else{
	$fileNames[]=$this->newFileName;
	}
	}
	}
	$this->newFileName=$fileNames;
	}
	$this->errorMess=$errors;
	return $return;
	} else {
	if($this->setFiles($name, $tmp_name, $size, $error)){
	if($this->checkFileSize() && $this->checkFileType()){
	$this->setNewFileName();
	if($this->copyFile()){
	return true;
	}else{
	$return=false;
	}
	}else{
	$return=false;
	}
	}else{
	$return=false;
	}
	if(!$return)
	$this->errorMess=$this->getError();
	return $return;
	}
	}
	private function copyFile(){
	if(!$this->errorNum){
	$filepath=rtrim($this->filepath, '/').'/';
	$filepath.=$this->newFileName;
	if(@move_uploaded_file($this->tmpFileName, $filepath)) {
	return true;
	}else{
	$this->setOption('errorNum', -3);
	return false;
	}
	}else{
	return false;
	}
	}
	//设置和$_FILES有关的内容
	private function setFiles($name="", $tmp_name='', $size=0, $error=0){
	$this->setOption('errorNum', $error);
	if($error){
	return false;
	}
	$this->setOption('originName', $name);
	$this->setOption('tmpFileName', $tmp_name);
	$arrStr=explode('.', $name);
	$this->setOption('fileType', strtolower($arrStr[count($arrStr)-1]));
	$this->setOption('fileSize', $size);
	return true;
	}
	//用于获取上传后文件的文件名
	function getNewFileName(){
	return $this->newFileName;
	}
	//上传如果失败,则调用这个方法,就可以查看错误报告
	function getErrorMsg() {
	return $this->errorMess;
	}
	}
/***   来自四海网(www.q1010.com)   ***/

本文来自:http://www.q1010.com/173/858-0.html

注:关于php 完全封装好上传文件类功能实例的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:上传文件

您可能感兴趣的文章

  • php 上传文件并入库的简单示例
  • php 上传文件到ftp服务器的简单示例(单文件)
  • php上传多个文件的实现方法
上一篇:PHP 数组相关函数大全
下一篇:php 自定义urlencode,urldecode函数的简单示例
热门文章
  • PHP 写入WRITE编码为UTF8的文件示例
  • PHP 中文字符串截取函数示例:支持gb2312,gbk,big
  • PHP 简单留言板的制作示例
  • 解决Fatal error: Call to undefined function mb_convert_encoding() in错误问题
  • PHP语言基础(标记、注释、变量、数组、常量、函数)示例
  • php 生成迅雷链接的简单示例
  • php 获取短网址的实现方法
  • PHP 通用分页类的简单示例
  • PHP 使用文件方式导入导出整个MYSQL数据库的实现方法
  • php 获取MYSQL错误的简单示例
  • 最新文章
    • 解决PHP使用redis实现统计缓存MySQL压力的问题
    • php 简单的上传进度条的简单示例
    • php 给html中引用的js和css路径打上版本号的实现方法
    • php 实现计算年龄精准到年月日的实例
    • php+ajax无刷新分页的简单示例
    • 解决php+ajax无刷新上传图片的问题
    • 解决PHP生成HTML静态页面的问题
    • 解决PHP使用uniqid函数生成唯一ID的问题
    • 解决PHP防刷票的一些问题
    • 微信access_token的获取开发的实现方法

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。