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
转载随意!带上文章地址吧。