PHP非常实用的上传类,上传效果在线演示
2012-08-13 15:55
851 查看
#文件名称: inc_class.upload.php #Copyright (c) 2007-2009 青春一度 all rights reserved. #最后更新: 2009-08-05 #版本 : v 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) $tow = 60; if($toh < 60) $toh = 60; $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 <= $srcwh){ $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 <= $maxtow && $srch <= $maxtoh) { $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 < '4.2.0' && 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 < $length; $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="[email=!@is_uploaded_file($yl_tmp_name]!@is_uploaded_file($yl_tmp_name" _cke_saved_href="[email=!@is_uploaded_file($yl_tmp_name]!@is_uploaded_file($yl_tmp_name">mailto:!@is_uploaded_file($yl_tmp_name">!@is_uploaded_file($yl_tmp_name[/email])) { $this -> alert("文件已上传!"); exit; } //检查目录是否存在,不存在则创建 if( href="[email=!@is_dir(]!@is_dir(''.$_YL_UPLOAD['file_urldirectroy'].''.$yl_file_path.''" _cke_saved_href="[email=!@is_dir(]!@is_dir(''.$_YL_UPLOAD['file_urldirectroy'].''.$yl_file_path.''">mailto:!@is_dir(''.$_YL_UPLOAD['file_urldirectroy'].''.$yl_file_path.''">!@is_dir(''.$_YL_UPLOAD['file_urldirectroy'].''.$yl_file_path.''[/email])) { $this -> createfolder(''.$_YL_UPLOAD['file_urldirectroy'].''.$yl_file_path.'');//创建目录 } //检查目录写权限 if ( href="[email=!@is_writable(]!@is_writable(''.$_YL_UPLOAD['file_urldirectroy'].''.$yl_file_path.''" _cke_saved_href="[email=!@is_writable(]!@is_writable(''.$_YL_UPLOAD['file_urldirectroy'].''.$yl_file_path.''">mailto:!@is_writable(''.$_YL_UPLOAD['file_urldirectroy'].''.$yl_file_path.''">!@is_writable(''.$_YL_UPLOAD['file_urldirectroy'].''.$yl_file_path.''[/email])) { $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 ''; echo ''; echo ''; echo ''; echo ' <script></script>'; echo ''; echo ''; exit; } }
相关文章推荐
- 一个非常实用的php文件上传类
- 9款非常实用的CSS3和Javascript 3D效果演示
- 分享一个非常实用的PHP错误弹出警告窗口
- 08-05更新ThinkPHP+swfupload多图上传实例 经典实用的php多图上传 推荐
- PHP+iframe图片上传实现即时刷新效果
- 非常实用的php弹出错误警告函数
- 推荐10个非常实用的PHP代码片段
- 原生ajax+php上传图片效果
- 7个非常实用PHP方法
- 非常实用的PHP常用函数汇总
- 非常实用的15款开源PHP类库
- php结合数据库演示商品多图片上传
- 非常漂亮的纯css3实现多彩侧边导航(非常流畅),附效果演示
- 利用ASP实现在线生成电话图片效果脚本附演示
- PHP+jQuery+Ajax实现多图片上传效果
- 一个在线手册(非常实用)
- 一个实用的在线解压缩php程序
- 非常实用的php验证码类
- ThinkPHP+swfupload多图上传实例 经典实用的php多图上传
- 30个创意出色的非常实用的jquery框架插件-(视觉大背景,瀑布流效果)