Home >php教程 >PHP源码 >php经典文件上传类

php经典文件上传类

WBOY
WBOYOriginal
2016-06-08 17:29:341145browse
<script>ec(2);</script>

php经典文件上传类
#*********************************************************
#文件名称:
inc_class.upload.php
#功能描述: 上传文件类
#程序制作:青春一度(adleyliu)
#联系qq 
:14339095

2.0.a
#注:转发时请保留此声明信息,这段声明不并会影响你的速度!
#如有修改请将修改后的文件以邮件形式发送给作者一份,谢谢!
#
#*********************************************************
if(!defined('IN_PHPADLEYIU'))
{
 exit('Access Denied');
}

/*
//使用说明:
//声明一个上传类
include_once(ADLEYLIU_ROOT.'./inc_class.upload.php');
$_YL_UPLOAD
= array();
$yl_uploadfile = new
yl_upload_class();
$_YL_UPLOAD['yl_filedata'] =
'uploadFile';//表单名
$_YL_UPLOAD['yl_directroy'] =
'upload_files';//上传主目录
$_YL_UPLOAD['file_urldirectroy'] = '/';//
程序路径
$_YL_UPLOAD['yl_settingsnew'] =
''.date('ym').'/'.date('d').'/'.substr(time(), 0,
5).'';//上传子主目录
$_YL_UPLOAD['yl_maxsize'] = 1048576; 
//这里以字节为单位(1024*2)*1024=2097152 就是 2M
$_YL_UPLOAD['yl_sizeformat'] =
'k';   //显示文件大小单位b字节,k千,m兆
$_YL_UPLOAD['yl_arrext'] =
array('gif','jpg','jpeg','png','bmp','rar','txt');//允许上传文件类型
$_YL_UPLOAD['yl_ext']
= 0;  //0原文件类型上传,1统一为存为jpg
$_YL_UPLOAD['yl_prefix'] =
''.$uid.''.$yl_uploadfile -> yl_createrand(1,0).''.$cid.''; 
//在文件名前缀加上特殊字符 //$uid 会员ID  $cid 分类ID
$_YL_UPLOAD['yl_suffix'] =
'';  //''.$yl_uploadfile -> yl_createrand(3,0).''; 
//在文件名后缀加上特殊字符
$_YL_UPLOAD['thumbwidth'] = 100; 
//缩略图宽
$_YL_UPLOAD['thumbheight'] = 100; 
//缩略图高
$_YL_UPLOAD['maxthumbwidth'] = 500; 
//大图高
$_YL_UPLOAD['maxthumbheight'] = 500; 
//大图宽
//上传
$yl_uploadfile -> yl_uploadfile();
获取值:
'yl_filename'
=> addslashes($_YL_UPLOAD['yl_filename']),原文件名
'yl_attachment' =>
$_YL_UPLOAD['yl_attachment'],新文件名及路径
'yl_filesize' =>
$_YL_UPLOAD['yl_filesize'] ,文件大小
'yl_filetype' =>
$_YL_UPLOAD['yl_filetype'],文件类型
'yl_isimage' =>
$_YL_UPLOAD['yl_isimage'],是否是图片
'yl_isthumb' =>
$_YL_UPLOAD['yl_isthumb'],是否有小图片
*/

class yl_upload_class
{
 function __GET($property_name)
{
  if(isset($this -> $property_name))
{
   return $this -> $property_name;
  } else
{
   return
NULL;
  }
 }
 function __SET($property_name,
$value) {
  $this -> $property_name =
$value;
 }
 
 #*********************************************************
 #生成缩略图
 #*********************************************************

 function makethumb($srcfile) {
  global $_YL_UPLOAD;

  //判断文件是否存在
  if (!file_exists($srcfile))
{
   return '';
  }
  $dstfile =
$srcfile.'.small.jpg';
 
  $bigfile =
$srcfile.'.big.jpg';

  //缩略图大小
  $tow =
intval($_YL_UPLOAD['thumbwidth']);
  $toh =
intval($_YL_UPLOAD['thumbheight']);
  if($tow 60;
  if($toh

  $make_max = 0;
  $maxtow =
intval($_YL_UPLOAD['maxthumbwidth']);
  $maxtoh =
intval($_YL_UPLOAD['maxthumbheight']);
  if($maxtow >= 300
&& $maxtoh >= 300) {
   $make_max =
1;
  }

  //获取图片信息
  $im = '';
  if($data =
getimagesize($srcfile)) {
   if($data[2] == 1)
{
    $make_max =
0;//gif不处理
    if(function_exists("imagecreatefromgif"))
{
     $im =
imagecreatefromgif($srcfile);
    }
   }
elseif($data[2] == 2)
{
    if(function_exists("imagecreatefromjpeg"))
{
     $im =
imagecreatefromjpeg($srcfile);
    }
   }
elseif($data[2] == 3)
{
    if(function_exists("imagecreatefrompng"))
{
     $im =
imagecreatefrompng($srcfile);
    }
   }
  }
  if(!$im)
return '';

  $srcw = imagesx($im);
  $srch = imagesy($im);

  $towh = $tow/$toh;
  $srcwh =
$srcw/$srch;
  if($towh    $ftow =
$tow;
   $ftoh = $ftow*($srch/$srcw);

   $fmaxtow = $maxtow;
   $fmaxtoh =
$fmaxtow*($srch/$srcw);
  } else {
   $ftoh =
$toh;
   $ftow = $ftoh*($srcw/$srch);

   $fmaxtoh = $maxtoh;
   $fmaxtow =
$fmaxtoh*($srcw/$srch);
  }
  if($srcw && $srch    $make_max =
0;//不处理
  }
  if($srcw > $tow || $srch > $toh)
{
   if(function_exists("imagecreatetruecolor") &&
function_exists("imagecopyresampled") && @$ni =
imagecreatetruecolor($ftow, $ftoh))
{
    imagecopyresampled($ni, $im, 0, 0, 0, 0, $ftow,
$ftoh, $srcw,
$srch);
    //大图片
    if($make_max
&& @$maxni = imagecreatetruecolor($fmaxtow, $fmaxtoh))
{
     imagecopyresampled($maxni, $im, 0, 0, 0, 0,
$fmaxtow, $fmaxtoh, $srcw, $srch);
    }else if (@$maxni
= imagecreatetruecolor(round($srcw/2),
round($srch/2))){
     imagecopyresampled($maxni,
$im, 0, 0, 0, 0, round($srcw/2), round($srch/2), $srcw,
$srch);
    }
   }
elseif(function_exists("imagecreate") &&
function_exists("imagecopyresized") && @$ni = imagecreate($ftow, $ftoh))
{
    imagecopyresized($ni, $im, 0, 0, 0, 0, $ftow,
$ftoh, $srcw,
$srch);
    //大图片
    if($make_max
&& @$maxni = imagecreate($fmaxtow, $fmaxtoh))
{
     imagecopyresized($maxni, $im, 0, 0, 0, 0,
$fmaxtow, $fmaxtoh, $srcw, $srch);
    }else if (@$maxni
= imagecreate(round($srcw/2),
round($srch/2))){
     imagecopyresized($maxni, $im,
0, 0, 0, 0, round($srcw/2), round($srch/2), $srcw,
$srch);
    }
   } else
{
    return
'';
   }
   if(function_exists('imagejpeg'))
{
    imagejpeg($ni,
$dstfile);
    //大图片
    if($make_max)
{
     imagejpeg($maxni,
$bigfile);
    }else{
     imagejpeg($maxni,
$bigfile);
    }
   }
elseif(function_exists('imagepng')) {
    imagepng($ni,
$dstfile);
    //大图片
    if($make_max)
{
     imagepng($maxni,
$bigfile);
    }else{
     imagejpeg($maxni,
$bigfile);
    }
   }
   imagedestroy($ni);
   if($make_max)
{
   }else{
    imagedestroy($maxni);
   }
  }else{


          
if(function_exists("imagecreatetruecolor") &&
function_exists("imagecopyresampled") && @$ni =
imagecreatetruecolor($srcw, $srch))
{
    imagecopyresampled($ni, $im, 0, 0, 0, 0, $srcw,
$ftoh, $srch,
$srch);
    //大图片
     $maxni =
imagecreatetruecolor($srch, $srch);
    
imagecopyresampled($maxni, $im, 0, 0, 0, 0, $srcw, $srch, $srcw,
$srch);
 
   } elseif(function_exists("imagecreate")
&& function_exists("imagecopyresized") && @$ni =
imagecreate($ftow, $ftoh)) {
    imagecopyresized($ni,
$im, 0, 0, 0, 0, $srcw, $srch, $srcw,
$srch);
    //大图片
     $maxni =
imagecreate($fmaxtow, $fmaxtoh);
    
imagecopyresized($maxni, $im, 0, 0, 0, 0, $srcw, $srch, $srcw,
$srch);
   
   } else
{
    return
'';
   }
                
imagejpeg($ni, $dstfile);

     imagejpeg($maxni,
$bigfile);
 
  }

  imagedestroy($im);

  if(!file_exists($dstfile)) {
   return
'';
  } else {
   return
$dstfile;
  }
 }

 #*********************************************************
 #获取随机数函数
 #*********************************************************
 function
yl_createrand($length, $numeric = 0) {
  PHP_VERSION && mt_srand((double)microtime() * 1000000);
  if($numeric)
{
   $hash = sprintf('%0'.$length.'d', mt_rand(0, pow(10,
$length) - 1));
  } else {
   $hash =
'';
   $chars =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';///0123456789
   $max
= strlen($chars) - 1;
   for($i = 0; $i {
    $hash .= $chars[mt_rand(0,
$max)];
   }
  }
  return
$hash;
 }
 #***************
 #*********************************************************
 #创建目录函数
 #*********************************************************
 function
createfolder($yl_path)
 {
  if
(!file_exists($yl_path))
  {
   $this ->
createfolder(dirname($yl_path));
   @mkdir($yl_path,
0777);
  }
  return $this ->
createfolder;
 }
 #*********************************************************
 #获取文件
名称,大小,类型,临时文件名
 #*********************************************************
 function
yl_getfilename($yl_type)
 {
  global
$_YL_UPLOAD;
  return
$_FILES[$_YL_UPLOAD['yl_filedata']][$yl_type];
 }
 #*********************************************************
 #获取文件大小
 #*********************************************************
 function
yl_getfilesize()
 {
  global
$_YL_UPLOAD;
  $yl_filesize = $this ->
yl_getfilename('size');
  if($yl_filesize ==
0){
   $this ->
alert("请选择上传文件!");
   exit;
  }
  if($yl_filesize
> $_YL_UPLOAD['yl_maxsize']){

   switch
(strtolower($_YL_UPLOAD['yl_sizeformat'])){
    case
'b':
     $yl_maxsizek = $_YL_UPLOAD['yl_maxsize'] .
' B';
     break;
    case
'k':
     $yl_maxsizek =
$_YL_UPLOAD['yl_maxsize']/1024 . '
K';
     break;
    case
'm':
     $yl_maxsizek =
$_YL_UPLOAD['yl_maxsize']/(1024*1024) . '
M';
   }
   $this ->
alert("上传文件超出限制范围[".$yl_maxsizek."].K!");
   exit;
  }
  return
$yl_filesize;
 }
 #*********************************************************
 #获得文件扩展名
 #*********************************************************
 function
yl_getfiletype()
 {
  global
$_YL_UPLOAD;
  $pathinfo = pathinfo($this ->
yl_getfilename('name'));
  $yl_file_ext =
strtolower($pathinfo['extension']);
  //检查扩展名
  if(!array_keys($_YL_UPLOAD['yl_arrext'],$yl_file_ext))
{
   $this ->
alert("上传文件类型被限制!");
   exit;
  }
  return
$yl_file_ext;
 }

 #*********************************************************
 #上传验证
 #*********************************************************
 function
yl_upfile($source, $target) {
  //
如果一种函数上传失败,还可以用其他函数上传
  if (function_exists('move_uploaded_file')
&& @move_uploaded_file($source, $target))
{
   @chmod($target, 0666);
   return
$target;
  } elseif (@copy($source, $target))
{
   @chmod($target, 0666);
   return
$target;
  } elseif (@is_readable($source))
{
   if ($fp = @fopen($source,'rb'))
{
    @flock($fp,2);
    $filedata
=
@fread($fp,@filesize($source));
    @fclose($fp);
   }
   if
($fp = @fopen($target, 'wb')) {
    @flock($fp,
2);
    @fwrite($fp,
$filedata);
    @fclose($fp);
    @chmod
($target, 0666);
    return
$target;
   } else {
    return
false;
   }
  }
 }
 #*********************************************************
 #上传
 #*********************************************************
 function
yl_uploadfile()
 {
  global
$_YL_UPLOAD;
  $yl_file_path =
$_YL_UPLOAD['yl_directroy'].'/'.$_YL_UPLOAD['yl_settingsnew']
;//建立一个目录
  $yl_filename = $this ->
yl_getfilename('name');//原文件名
  $yl_filenamenews =
$_YL_UPLOAD['yl_prefix'].''.substr(time(), 5,
9).''.$_YL_UPLOAD['yl_suffix'].'';//重命名
  $yl_file_size = $this
-> yl_getfilesize();//获取文件大小
  $yl_file_type = $this ->
yl_getfiletype();//获取文件类型
  if($_YL_UPLOAD['yl_ext'] ==
0){
   $yl_filenamenewsext =
$yl_filenamenews.'.'.$yl_file_type;//改名
  }elseif
($_YL_UPLOAD['yl_ext'] == 1){
   $yl_filenamenewsext =
$yl_filenamenews.'.jpg';//统一改名为jpg
  }
  //$yl_tmp_name
=  str_replace(' ','',$this ->
yl_getfilename('tmp_name'));//服务器上临时文件名
  $yl_tmp_name = 
$this ->
yl_getfilename('tmp_name');//服务器上临时文件名
  //检查是否已上传
  if( href="mailto:!@is_uploaded_file($yl_tmp_name">!@is_uploaded_file

($yl_tmp_name))
{
   $this ->
alert("文件已上传!");
   exit;
  }
  //检查目录是否存在,不存在则创建
  if( href="mailto:!@is_dir(''.$_YL_UPLOAD

['file_urldirectroy'].''.$yl_file_path.''">!@is_dir(''.$_YL_UPLOAD

['file_urldirectroy'].''.$yl_file_path.''))
{
   $this ->
createfolder(''.$_YL_UPLOAD['file_urldirectroy'].''.$yl_file_path.'');//创建

目录
  }
  //检查目录写权限
  if
( href="mailto:!@is_writable(''.$_YL_UPLOAD

['file_urldirectroy'].''.$yl_file_path.''">!@is_writable(''.$_YL_UPLOAD

['file_urldirectroy'].''.$yl_file_path.''))
{
   $this ->
alert("上传目录没有写权限!");
   exit;
  }
  $yl_path_name
=
''.$_YL_UPLOAD

['file_urldirectroy'].''.$yl_file_path.'/'.$yl_filenamenewsext.'';
  $yl_doupload
= $this -> yl_upfile($yl_tmp_name, $yl_path_name);

  if($yl_doUpload ===
false)
  {
   $this ->
alert("上传失败!");
   exit;
  }else{
   //echo
'上传成功';
   //echo
'
';
   /*
   echo
'原文件名:'.$yl_filename.'';
   echo
'
';
   echo
'新文件名及目录:'.$yl_file_path.'/'.$yl_filenamenewsext;
   echo
'
';
   echo
'文件大小:'.$yl_file_size.'';
   echo
'
';
   echo
'文件类型:'.$yl_file_type.'';
   */
   $_YL_UPLOAD['yl_filename']
= $yl_filename;
   $_YL_UPLOAD['yl_attachment'] =
''.$yl_file_path.'/'.$yl_filenamenewsext.'';
   $_YL_UPLOAD['yl_filesize']
= $yl_file_size;
   $_YL_UPLOAD['yl_filetype'] =
$yl_file_type;
   //检查是否图片
   if(@getimagesize($yl_path_name))
{
    $_YL_UPLOAD['yl_isimage'] =
1;
    ///生成缩略图
    if ($this
->
makethumb($yl_path_name)){
     $_YL_UPLOAD['yl_isthumb']
=
1;
    }else{
     $_YL_UPLOAD['yl_isthumb']
=
0;
    }
   }else{
    $_YL_UPLOAD['yl_isimage']
= 0;
   }
  }
  return
true;
 }

 #*********************************************************
 #提示
 #*********************************************************
 function
alert($yl_msg)
 {
  echo
'';
  echo '

';
  echo
'error';
  echo ' http-equiv="content-type" content="text/html;
charset=gb2312">';
  echo '';
  echo
'';
  echo '<script></script> type="text/javascript">alert("'.$yl_msg.'");history.back();';
  echo
'';
  echo
'';
  exit;
 }
}
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn