php经典文件上传类
<?php //********************************************************* //文件名称: //inc_class.upload.php //功能描述: 上传文件类 //程序制作:青春一度(adleyliu) //注:转发时请保留此声明信息,这段声明不并会影响你的速度! //如有修改请将修改后的文件以邮件形式发送给作者一份,谢谢! // //********************************************************* 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 (!@is_uploaded_file($yl_tmp_name)) { $this->alert("文件已上传!"); exit; } //检查目录是否存在,不存在则创建 if (!@is_dir(''.$_YL_UPLOAD['file_urldirectroy'].''.$yl_file_path) { $this->createfolder('' . $_YL_UPLOAD['file_urldirectroy'] . '' . $yl_file_path . ''); //创建目录 } //检查目录写权限 if (!@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 '<br>'; /* echo '原文件名:'.$yl_filename.''; echo '<br>'; echo '新文件名及目录:'.$yl_file_path.'/'.$yl_filenamenewsext; echo '<br>'; echo '文件大小:'.$yl_file_size.''; echo '<br>'; 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 '<html>'; echo '<head>'; echo '<title>error</title>'; echo '<meta http-equiv="content-type" content="text/html; charset=gb2312">'; echo '</head>'; echo '<body>'; echo '<script type="text/javascript">alert("' . $yl_msg . '");history.back();</script>'; echo '</body>'; echo '</html>'; exit; } }
永久链接:http://www.phprm.com/code/c0ceef06fdd35b40294a846441c9abf3.html
转载随意!带上文章地址吧。