• 技术文章 >后端开发 >php教程

    php 图片上传类代码_php实例

    2016-05-17 09:31:26原创331
    先来个简单的:
    复制代码 代码如下:

    //http://www.jb51.net
    class upLoad{
    public $length; //限定文件大小
    public $file; //判断此类是用于图片上传还是文件上传
    public $fileName; //文件名
    public $fileTemp; //上传临时文件
    public $fileSize; //上传文件大小
    public $error; //上传文件是否有错,php4没有
    public $fileType; //上传文件类型
    public $directory; //
    public $maxLen;
    public $errormsg;
    function __construct($length,$file=true,$directory)
    {
    $this->maxLen=$length;
    $this->length=$length*1024;
    $this->file=$file; //true为一般文件,false为图片的判断
    $this->directory=$directory;
    }
    public function upLoadFile($fileField)
    {
    $this->fileName=$fileField['name'];
    $this->fileTemp=$fileField['tmp_name'];
    $this->error=$fileField['error'];
    $this->fileType=$fileField['type'];
    $this->fileSize=$fileField['size'];
    $pathSign = DIRECTORY_SEPARATOR; // /
    if($this->file) //一般文件上传
    {
    $path = $this->_isCreatedDir($this->directory);//取得路径
    if($path)//http://www.jb51.net
    {
    $createFileType = $this->_getFileType($this->fileName);//设置文件类别
    $createFileName=uniqid(rand()); //随机产生文件名
    $thisDir=$this->directory.$pathSign.$createFileName.".".$createFileType;
    if(@move_uploaded_file($this->fileTemp,$thisDir)) //把临时文件移动到规定的路径下
    {
    return $thisDir;
    }
    }
    }else{ //图片上传
    $path = $this->_isCreatedDir($this->directory);//取得路径
    if($path)//路径存在//http://www.jb51.net
    {
    $createFileType = $this->_getFileType($this->fileName);//设置文件类别
    $createFileName=uniqid(rand());
    return @move_uploaded_file($this->fileTemp,$this->directory.$pathSign.$createFileName.".".$createFileType) ? true : false;
    }
    }
    }
    public function _isBig($length,$fsize) //返回文件是否超过规定大小
    {
    return $fsize>$length ? true : false;
    }
    public function _getFileType($fileName) //获得文件的后缀
    {
    return end(explode(".",$fileName));
    }
    public function _isImg($fileType) //上传图片类型是否允许
    {
    $type=array("jpeg","gif","jpg","bmp");
    $fileType=strtolower($fileType);
    $fileArray=explode("//m.sbmmt.com/m/",$fileType);
    $file_type=end($fileArray);
    return in_array($file_type,$type);//http://www.jb51.net
    }
    public function _isCreatedDir($path) //路径是否存在,不存在就创建
    {
    if(!file_exists($path))
    {
    return @mkdir($path,0755)?true:false; //权限755//
    }
    else
    {
    return true;
    }
    }
    public function showError() //显示错误信息
    {//http://www.jb51.net
    echo " \n";
    exit();
    }
    }
    class multiUpLoad extends upLoad{
    public $FILES;
    function __construct($arrayFiles,$length,$file=true,$directory)
    {
    $this->FILES=$arrayFiles;
    parent::__construct($length,$file,$directory);
    }
    function upLoadMultiFile()
    {
    $arr=array();
    if($this->_judge()||$this->_judge()=="no") //文件全部符合规格,就开始上传
    {
    foreach($this->FILES as $key=>$value)
    {
    $strDir=parent::upLoadFile($this->FILES[$key]);
    array_push($arr, $strDir);
    }
    //http://www.jb51.net
    return $arr;
    }else
    {
    return false;
    }
    }
    function _judge()
    {
    if($this->file)
    {
    foreach($this->FILES as $key=>$value)
    {
    if($this->_isBig($this->length,$value['size']))
    {
    $this->errormsg="文件超过 $this->maxLen K";
    parent::showError();
    }
    if($value['error']=UPLOAD_ERR_NO_FILE)
    {
    //$this->errormsg="上传文件出现错误";
    //parent::showError();
    return "no";
    }
    }
    return true;
    }else
    {
    //http://www.jb51.net
    foreach($this->FILES as $key=>$value)
    {
    if($this->_isBig($this->length,$value['size']))
    {
    $this->errormsg="图片超过$this->maxLen";
    parent::showError();
    }
    if($value['error']!=0)
    {
    $this->errormsg="上传图片出现错误";
    parent::showError();
    }
    if(!$this->_isImg($value['type']))
    {
    $this->errormsg="图片格式不对";
    parent::showError();
    }
    }
    return true;
    }
    }
    }
    ?>

    再来个复杂点的,可以自动生成缩略图的功能的php上传类
    开始第一步:
    创建文件夹,布局:
    annex:附件(该目录下存放上传的原图片)
    |— smallimg:存放缩略图片
    |— mark:存放水印图片
    include:存放类文件,字体(本程序代码使用的是:04B_08__.TTF)
    |— upfile.php:集成简单上传,生成缩略图及水印的类文件信息
    |— 04B_08__.TTF:字体文件
    test.php:测试文件
    第二步上传类
    upfile.php
    复制代码 代码如下:

    class UPImages {
    var $annexFolder = "annex";//附件存放点,默认为:annex
    var $smallFolder = "smallimg";//缩略图存放路径,注:必须是放在 $annexFolder下的子目录,默认为:smallimg
    var $markFolder = "mark";//水印图片存放处
    var $upFileType = "jpg gif png";//上传的类型,默认为:jpg gif png rar zip
    var $upFileMax = 1024;//上传大小限制,单位是“KB”,默认为:1024KB
    var $fontType;//字体
    var $maxWidth = 500; //图片最大宽度
    var $maxHeight = 600; //图片最大高度
    function UPImages($annexFolder,$smallFolder,$includeFolder) {
    $this->annexFolder = $annexFolder;
    $this->smallFolder = $smallFolder;
    $this->fontType = $includeFolder."/04B_08__.TTF";
    }
    function upLoad($inputName) {
    $imageName = time();//设定当前时间为图片名称
    if(@empty($_FILES[$inputName]["name"])) die(error("没有上传图片信息,请确认"));
    $name = explode(".",$_FILES[$inputName]["name"]);//将上传前的文件以“.”分开取得文件类型
    $imgCount = count($name);//获得截取的数量
    $imgType = $name[$imgCount-1];//取得文件的类型
    if(strpos($this->upFileType,$imgType) === false) die(error("上传文件类型仅支持 ".$this->upFileType." 不支持 ".$imgType));
    $photo = $imageName.".".$imgType;//写入数据库的文件名
    $uploadFile = $this->annexFolder."//m.sbmmt.com/m/".$photo;//上传后的文件名称
    $upFileok = move_uploaded_file($_FILES[$inputName]["tmp_name"],$uploadFile);
    if($upFileok) {
    $imgSize = $_FILES[$inputName]["size"];
    $kSize = round($imgSize/1024);
    if($kSize > ($this->upFileMax*1024)) {
    @unlink($uploadFile);
    die(error("上传文件超过 ".$this->upFileMax."KB"));
    }
    } else {
    die(error("上传图片失败,请确认你的上传文件不超过 $upFileMax KB 或上传时间超时"));
    }
    return $photo;
    }
    function getInfo($photo) {
    $photo = $this->annexFolder."//m.sbmmt.com/m/".$photo;
    $imageInfo = getimagesize($photo);
    $imgInfo["width"] = $imageInfo[0];
    $imgInfo["height"] = $imageInfo[1];
    $imgInfo["type"] = $imageInfo[2];
    $imgInfo["name"] = basename($photo);
    return $imgInfo;
    }
    function smallImg($photo,$width=128,$height=128) {
    $imgInfo = $this->getInfo($photo);
    $photo = $this->annexFolder."//m.sbmmt.com/m/".$photo;//获得图片源
    $newName = substr($imgInfo["name"],0,strrpos($imgInfo["name"], "."))."_thumb.jpg";//新图片名称
    if($imgInfo["type"] == 1) {
    $img = imagecreatefromgif($photo);
    } elseif($imgInfo["type"] == 2) {
    $img = imagecreatefromjpeg($photo);
    } elseif($imgInfo["type"] == 3) {
    $img = imagecreatefrompng($photo);
    } else {
    $img = "";
    }
    if(empty($img)) return False;
    $width = ($width > $imgInfo["width"]) ? $imgInfo["width"] : $width;
    $height = ($height > $imgInfo["height"]) ? $imgInfo["height"] : $height;
    $srcW = $imgInfo["width"];
    $srcH = $imgInfo["height"];
    if ($srcW * $width > $srcH * $height) {
    $height = round($srcH * $width / $srcW);
    } else {
    $width = round($srcW * $height / $srcH);
    }
    if (function_exists("imagecreatetruecolor")) {
    $newImg = imagecreatetruecolor($width, $height);
    ImageCopyResampled($newImg, $img, 0, 0, 0, 0, $width, $height, $imgInfo["width"], $imgInfo["height"]);
    } else {
    $newImg = imagecreate($width, $height);
    ImageCopyResized($newImg, $img, 0, 0, 0, 0, $width, $height, $imgInfo["width"], $imgInfo["height"]);
    }
    if ($this->toFile) {
    if (file_exists($this->annexFolder."//m.sbmmt.com/m/".$this->smallFolder."//m.sbmmt.com/m/".$newName)) @unlink($this->annexFolder."//m.sbmmt.com/m/".$this->smallFolder."//m.sbmmt.com/m/".$newName);
    ImageJPEG($newImg,$this->annexFolder."//m.sbmmt.com/m/".$this->smallFolder."//m.sbmmt.com/m/".$newName);
    return $this->annexFolder."//m.sbmmt.com/m/".$this->smallFolder."//m.sbmmt.com/m/".$newName;
    } else {
    ImageJPEG($newImg);
    }
    ImageDestroy($newImg);
    ImageDestroy($img);
    return $newName;
    }
    function waterMark($photo,$text) {
    $imgInfo = $this->getInfo($photo);
    $photo = $this->annexFolder."//m.sbmmt.com/m/".$photo;
    $newName = substr($imgInfo["name"], 0, strrpos($imgInfo["name"], ".")) . "_mark.jpg";
    switch ($imgInfo["type"]) {
    case 1:
    $img = imagecreatefromgif($photo);
    break;
    case 2:
    $img = imagecreatefromjpeg($photo);
    break;
    case 3:
    $img = imagecreatefrompng($photo);
    break;
    default:
    return False;
    }
    if (empty($img)) return False;
    $width = ($this->maxWidth > $imgInfo["width"]) ? $imgInfo["width"] : $this->maxWidth;
    $height = ($this->maxHeight > $imgInfo["height"]) ? $imgInfo["height"] : $this->maxHeight;
    $srcW = $imgInfo["width"];
    $srcH = $imgInfo["height"];
    if ($srcW * $width > $srcH * $height) {
    $height = round($srcH * $width / $srcW);
    } else {
    $width = round($srcW * $height / $srcH);
    }
    if (function_exists("imagecreatetruecolor")) {
    $newImg = imagecreatetruecolor($width, $height);
    ImageCopyResampled($newImg, $img, 0, 0, 0, 0, $width, $height, $imgInfo["width"], $imgInfo["height"]);
    } else {
    $newImg = imagecreate($width, $height);
    ImageCopyResized($newImg, $img, 0, 0, 0, 0, $width, $height, $imgInfo["width"], $imgInfo["height"]);
    }
    $white = imageColorAllocate($newImg, 255, 255, 255);
    $black = imageColorAllocate($newImg, 0, 0, 0);
    $alpha = imageColorAllocateAlpha($newImg, 230, 230, 230, 40);
    ImageFilledRectangle($newImg, 0, $height-26, $width, $height, $alpha);
    ImageFilledRectangle($newImg, 13, $height-20, 15, $height-7, $black);
    ImageTTFText($newImg, 4.9, 0, 20, $height-14, $black, $this->fontType, $text[0]);
    ImageTTFText($newImg, 4.9, 0, 20, $height-6, $black, $this->fontType, $text[1]);
    if($this->toFile) {
    if (file_exists($this->annexFolder."//m.sbmmt.com/m/".$this->markFolder."//m.sbmmt.com/m/".$newName)) @unlink($this->annexFolder."//m.sbmmt.com/m/".$this->markFolder."//m.sbmmt.com/m/".$newName);
    ImageJPEG($newImg,$this->annexFolder."//m.sbmmt.com/m/".$this->markFolder."//m.sbmmt.com/m/".$newName);
    return $this->annexFolder."//m.sbmmt.com/m/".$this->markFolder."//m.sbmmt.com/m/".$newName;
    } else {
    ImageJPEG($newImg);
    }
    ImageDestroy($newImg);
    ImageDestroy($img);
    return $newName;
    }
    }
    ?>

    第三步:测试上传类
    test.php
    复制代码 代码如下:

    $annexFolder = "annex";
    $smallFolder = "smallimg";
    $markFolder = "mark";
    $includeFolder = "include";
    require("./".$includeFolder."/upfile.php");
    $img = new UPImages($annexFolder,$smallFolder,$includeFolder);
    $text = array("www.jb51.net","all rights reserved");
    if(@$_GET["go"]) {
    $photo = $img->upLoad("upfile");
    $img->maxWidth = $img->maxHeight = 350;//设置生成水印图像值
    $img->toFile = true;
    $newSmallImg = $img->smallImg($photo);
    $newMark = $img->waterMark($photo,$text);
    echo "

    ";
    echo "

    ";
    echo "继续上传";
    } else {
    ?>






    }
    ?>
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php 图片上传类
    上一篇:PHP 变量定义和变量替换的方法_php技巧 下一篇:php 执行系统命令的方法_php技巧
    千万级数据并发解决方案

    相关文章推荐

    • [PHP]实用函数3_php实例• php桌面中心(二) 数据库写入_php实例• 怎么用Yii框架实现登录日记• 咨询关于Paypal支付的开发方法,该如何解决• 大侠一个Smarty的有关问题
    1/1

    PHP中文网