首页 > php代码 > php经典文件上传类

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

转载随意!带上文章地址吧。

标签:none

发表留言