+ -
当前位置:首页 → 问答吧 → 上传类

上传类

时间:2008-07-25

来源:互联网


<?php
/**
功能:文件上传
作者:Eyes
创建时间:2005.7.14
最后修改时间:2005.7.14
使用方法:
一、单文件上传
假设文件域名为:up
$upfile = new upfile('/upfiles/','jpg,gif,png');
if ($upfile->upload($_FILES['up]))
echo '上传成功';
else
echo '上传失败,失败原因:'.$upfile->err;
二、多文件上传
假设文件域名为:up
$upfile = new upfile('/upfiles/','jpg,gif,png');
$tmp = $upfile->tranarr('up'); //这里要用到一个临时变量
foreach ($tmp as $v)
{
$upfile->upload($_FILES['up]);
}
**/
class upfile
{
//原文件名
var $oldname;
//保存文件名
var $savename;
//保存路径
var $savepath;
//上传文件最大值
var $maxsize = 2097152;
//是否覆盖同名文件
var $overwrite = 0;
//能上传文件格式
var $format;
//错误信息
var $err;
    //构造函数
    function upfile($savepath,$format)
    {
  $this->savepath = preg_match("/\/$/",$savepath)?$savepath:$savepath.'/';
  $this->format = explode(',',strtolower($format));
    }
    //
    function upload($array,$savename='')
    {
     $this->err = '';
     $this->oldname = $array['name'];
     $this->savename = ''==$savename?$this->makename():$savename;
     //---- begin check ----//
        if (1==$array['error'])
        {
   $this->err = '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值';
   return false;
        }
        elseif (2==$array['error'])
        {
   $this->err = '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值';
   return false;
        }
        elseif (3==$array['error'])
        {
   $this->err = '文件只有部分被上传';
   return false;
        }
        elseif (4==$array['error'])
        {
            $this->err = '没有文件被上传';
            return false;
        }
        elseif ($array['size']>$this->maxsize)
        {
   $this->err = '上传文件大小超过允许的最大值';
   return false;
        }
        elseif (!$this->isallowformat())
        {
   $this->err = '不允许上传的文件格式';
   return false;
        }
  //---- end check ----//
  //---- begin uplode ----//
  $newfile = $this->savepath.$this->savename;
  if (move_uploaded_file($array['tmp_name'],$newfile))
   return $this->savename;
  else
  {
   $this->err = '上传失败';
   return 0;
  }
  //---- end uplode ----//
    }//end uplode
    //获取文件扩展名
    function getext($filename='')
    {
     $filename = empty($filename)?$this->oldname:$filename;
  $ar = explode('.',$filename);
  return $ar[count($ar)-1];
    }
    //是否是允许的上传文件格式
    function isallowformat($filename='')
    {
     $filename = empty($filename)?$this->oldname:$filename;
  if (in_array(strtolower($this->getext($filename)),$this->format))
   return 1;
  else
  {
   //$this->err = '不允许的文件格式';
   return 0;
  }
    }
    //保存的文件名
    function makename($filename='')
    {
     $filename = empty($filename)?$this->oldname:$filename;
  $s = microtime();
  $s = str_replace('.','',$s);
  $s = str_replace(' ','',$s);
  return $s.rand(10000,100000).'.'.$this->getext($filename);
    }
    //转换多文件上传时的数组
    //$area 转换范围,如果不为ALL,那么只上传非空的文件表单中的文件,跳过空表单
    function tranarr($form,$area='all')
    {
     $array = $_FILES[$form];
  $c = count($array['name']);
        for ($i=0; $i<$c; $i++)
        {
   $ar['name'] = $array['name'][$i];
   $ar['type'] = $array['type'][$i];
   $ar['tmp_name'] = $array['tmp_name'][$i];
   $ar['error'] = $array['error'][$i];
   $ar['size'] = $array['size'][$i];
   if ('all'==$area)
    $r[] = $ar;
   else
   {
    if ($ar['error']!=4)
     $r[] = $ar;
   }
        }
  return $r;
    }

}//end class
?>

作者: ggyuhai   发布时间: 2008-07-24

恩,学习一下

作者: EricHoo   发布时间: 2008-07-25