找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1761|回复: 0
打印 上一主题 下一主题

PHP实现的多文件上传类及用法示例

[复制链接]

2560

主题

2560

帖子

7622

积分

论坛元老

Rank: 8Rank: 8

积分
7622
跳转到指定楼层
楼主
发表于 2018-2-14 05:36:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            本文实例讲述了PHP实现的多文件上传类及用法。分享给大家供大家参考,具体如下:
1、upFiles.css.php 文件
$val){
  $key = strtolower($key);
  //查看传进来的数组里下标是否与成员属性相同
  //print_r(array_keys(get_class_vars(get_class($this))));
  if(!in_array($key,array_keys(get_class_vars(get_class($this))))){
  continue;
  }else{
  $this->setOption($key,$val);
  }
}
}
private function setOption($key,$val){
   $this->$key = $val;
//echo $this->errorNum."
";
}
//检查文件上传路径
private function checkfilePath(){
//echo $this->filepath;
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 getError(){
$str = "上传文件{$this->originName}出错---";
switch($this->errorNum){
  case 4; $str .= "没有文件被上传";break;
  case 3; $str .= "文件只被部分上传";break;
  case 2; $str .= "超过文件表单允许大小";break;
  case 1; $str .= "超过php.ini中允许大小";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."
";
}
//检查文件类型
private function checkfileType(){
//echo $this->fileType;
if(!in_array(strtolower($this->fileType),$this->allowtype)){
$this->setOption('errorNum','-1');
  return false;
}else{
  return true;
}
}
//检查文件大小
private function checkfileSize(){
if($this->fileSize > $this->maxsize){
  $this->setOption('errorNum','-2');
  return false;
}else{
  return true;
}
}
//处理随机文件名称
private function prorandFile(){
$ch = $this->israndfile;
if($ch == 'true'){
  return true;
}else{
  return false;
}
}
//
private function setFiles($name="",$tmp_name="",$size="",$error=""){
//检查上传路径
if(!$this->checkfilePath()){
  //$this->errorMessg = $this->getError();
  return false;
}
//echo $error."
";
if($error){
$this->setOption('errorNum',$error);
  return false;
}
$arrstr  = explode('.',$name);
$type   = end($arrstr);
$this->setOption('originName',$name);
$this->setOption('fileSize',$size);
$this->setOption('fileType',$type);
$this->setOption('tmpfileName',$tmp_name);
return true;
}
//检查是否有文件上传
function checkFile($formname){
if(!@$_FILES[$formname]){
  $this->setOption('errorNum',4);
  return false;
}else{
  return true;
}
}
//上传文件
function uploadeFile($formname){
if(!$this->checkFile($formname)){
  $this->errorMessg = $this->getError();
  return false;
}
$return  = true;
$name   = @$_FILES[$formname]['name'];
$tmp_name = @$_FILES[$formname]['tmp_name'];
$size   = @$_FILES[$formname]['size'];
$error  = @$_FILES[$formname]['error'];
//$type   = $_FILES[$formname]['type'];
if(is_array($name)){
  $errors = array();
  for($i=0; $isetFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i])){
   if(!$this->checkfileSize() || !$this->checkfileType()){
   $errors[] = $this->getError();
   $return = false;
   }
  }else{
   $errors[] = $this->getError();
   $return = false;
  }
  if(!$return) $this->setFiles();
  }
  if($return){
  $newfileN = array();
  for($i=0; $isetFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i])){
   if(!$this->copyFile()){
    $errors[] = $this->getError();
    $return = false;
   }else{
    $newfileN[] = $this->newfileName;
   }
   }
   $this->newfileName = $newfileN;
  }
  }
  //print_r($errors);
  $this->errorMessg = $errors;
  //echo $errors;
  return $return;
}else{
  if($this->setFiles($name,$tmp_name,$size,$error)){
  $return = true;
  if($error) var_dump($error);
  if($this->checkfileSize() && $this->checkfileType()){
  }else{
   $return = false;
  }
  }else{
  $return = false;
  }
  if(!$return){
  $this->errorMessg = $this->getError();
  }
  return $return;
}
}
//获取上传后的文件名
function getnewFile(){
  return $this->newfileName;
}
//把文件拷贝到指定的路径
function copyFile(){
$filepath = rtrim($this->filepath,'/')."/";
if(!$this->errorNum){
  if($this->prorandFile()){
   $this->newfileName = date('Ymdhis').rand(1000,9999).".".$this->fileType;
  }else{
   $this->newfileName = $this->originName;
  }
  if(!move_uploaded_file($this->tmpfileName,$filepath.$this->newfileName)){
  $this->setOption('errorNum',-3);
  return false;
  }else{
  return true;
  }
}else{
  return false;
}
}
//上传错误后返回的消息
function gteerror(){
  $err = $this->errorMessg;
return $err;
}
}
?>
2、使用方法
uploade.php 文件:
'./upload','allowtype'=>array('php','bmp','gif','jpg','png'),'israndfile'=>true,'maxsize'=>'1000000'));
if($upfile ->uploadeFile('spic')){
$arrfile = $upfile ->getnewFile();
foreach($arrfile as $v){
echo $v,"
";
}
echo "上传成功!";
}else{
$err = $upfile ->gteerror();
if(is_array($err)){
foreach($err as $v1){
  echo $v1,"
";
}
}else{
echo $err;
}
//var_dump($err);
}
//var_dump($upfile);
?>
HTML 文件:
无标题文档












更多关于PHP相关内容感兴趣的读者可查看本站专题:《php文件操作总结》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php操作office文档技巧总结(包括word,excel,access,ppt)》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总
希望本文所述对大家PHP程序设计有所帮助。
            
            
您可能感兴趣的文章:
  • PHP5+UTF8多文件上传类
  • php+ajax实现图片文件上传功能实例
  • 使用ajaxfileupload.js实现ajax上传文件php版
  • 一个经典的PHP文件上传类分享
  • php可生成缩略图的文件上传类实例
  • php判断文件上传类型及过滤不安全数据的方法
  • PHP多文件上传类实例
  • 适用于初学者的简易PHP文件上传类
  • php文件上传类完整实例
  • 非常经典的PHP文件上传类分享
  • 功能强大的php文件上传类
  • PHP实现的文件上传类与用法详解
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端