php 图片上传类代码


Posted in PHP onJuly 17, 2009

先来个简单的:

<? 
//https://3water.com 
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)//https://3water.com 
{ 
$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)//路径存在//https://3water.com 
{ 
$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("/",$fileType); 
$file_type=end($fileArray); 
return in_array($file_type,$type);//https://3water.com 
} 
public function _isCreatedDir($path) //路径是否存在,不存在就创建 
{ 
if(!file_exists($path)) 
{ 
return @mkdir($path,0755)?true:false; //权限755// 
} 
else 
{ 
return true; 
} 
} 
public function showError() //显示错误信息 
{//https://3water.com 
echo "<Script Language ='JavaScript'>\n history.back();\n alert(' $this->errormsg');\n </Script> \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); 
} 
//https://3water.com 
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 
{ 
//https://3water.com 
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
<?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."/".$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."/".$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."/".$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."/".$this->smallFolder."/".$newName)) @unlink($this->annexFolder."/".$this->smallFolder."/".$newName); 
ImageJPEG($newImg,$this->annexFolder."/".$this->smallFolder."/".$newName); 
return $this->annexFolder."/".$this->smallFolder."/".$newName; 
} else { 
ImageJPEG($newImg); 
} 
ImageDestroy($newImg); 
ImageDestroy($img); 
return $newName; 
} 
function waterMark($photo,$text) { 
$imgInfo = $this->getInfo($photo); 
$photo = $this->annexFolder."/".$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."/".$this->markFolder."/".$newName)) @unlink($this->annexFolder."/".$this->markFolder."/".$newName); 
ImageJPEG($newImg,$this->annexFolder."/".$this->markFolder."/".$newName); 
return $this->annexFolder."/".$this->markFolder."/".$newName; 
} else { 
ImageJPEG($newImg); 
} 
ImageDestroy($newImg); 
ImageDestroy($img); 
return $newName; 
} 
} 
?>

第三步:测试上传类
test.php
<?php 
$annexFolder = "annex"; 
$smallFolder = "smallimg"; 
$markFolder = "mark"; 
$includeFolder = "include"; 
require("./".$includeFolder."/upfile.php"); 
$img = new UPImages($annexFolder,$smallFolder,$includeFolder); 
$text = array("3water.com","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 "<img src='".$newSmallImg."' border='0'><br><br>"; 
echo "<img src='".$newMark."' border='0'><br><br>"; 
echo "<a href='./test.php'>继续上传</a>"; 
} else { 
?> 
<form method="post" action="./test.php?go=go" enctype="multipart/form-data"> 
<input type="file" name="upfile"><br><br> 
<input type="submit" value="上传"> 
</form> 
<?php 
} 
?>
PHP 相关文章推荐
PHP 文章中的远程图片采集到本地的代码
Jul 30 PHP
php面向对象全攻略 (十六) 对象的串行化
Sep 30 PHP
php 字符串函数收集
Mar 29 PHP
PHP学习笔记 用户注册模块用户类以及验证码类
Sep 20 PHP
php数组去重实例及分析
Nov 26 PHP
PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
Jul 23 PHP
php遍历树的常用方法汇总
Jun 18 PHP
php版微信发红包接口用法示例
Sep 23 PHP
Python中使用django form表单验证的方法
Jan 16 PHP
关于PHP虚拟主机概念及如何选择稳定的PHP虚拟主机
Nov 20 PHP
PHP错误提示It is not safe to rely on the system……的解决方法
Mar 25 PHP
Swoole实现异步投递task任务案例详解
Apr 02 PHP
PHP源码之 ext/mysql扩展部分
Jul 17 #PHP
php 小乘法表实现代码
Jul 16 #PHP
php at(@)符号的用法简介
Jul 11 #PHP
php str_pad 函数用法简介
Jul 11 #PHP
php strlen mb_strlen计算中英文混排字符串长度
Jul 10 #PHP
UTF8编码内的繁简转换的PHP类
Jul 09 #PHP
PHP 程序授权验证开发思路
Jul 09 #PHP
You might like
PHP安装全攻略:APACHE
2006/10/09 PHP
PHP中使用GD库创建圆形饼图的例子
2014/11/19 PHP
php绘制一个扇形的方法
2015/01/24 PHP
分享PHP源码批量抓取远程网页图片并保存到本地的实现方法
2015/12/01 PHP
浅谈PHP定义命令空间的几个注意点(推荐)
2016/10/29 PHP
由php中字符offset特征造成的绕过漏洞详解
2017/07/07 PHP
js压缩利器
2007/02/20 Javascript
风吟的小型JavaScirpt库 (FY.JS).
2010/03/09 Javascript
javascript运动详解
2015/07/06 Javascript
zepto中使用swipe.js制作轮播图附swipeUp,swipeDown不起效果问题
2015/08/27 Javascript
Bootstrap编写一个兼容主流浏览器的受众门户式风格页面
2016/07/01 Javascript
BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)
2016/07/07 Javascript
js实现打地鼠小游戏
2017/02/13 Javascript
AngularJS动态绑定ng-options的ng-model实例代码
2017/06/21 Javascript
vue 使用自定义指令实现表单校验的方法
2018/08/28 Javascript
vue项目动态设置页面title及是否缓存页面的问题
2018/11/08 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
python 获取键盘输入,同时有超时的功能示例
2018/11/13 Python
Python获取Redis所有Key以及内容的方法
2019/02/19 Python
python搜索包的路径的实现方法
2019/07/19 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
2019/09/29 Python
HTML5 常用语法一览(列举不支持的属性)
2010/01/26 HTML / CSS
使用canvas来完成线性渐变和径向渐变的功能的方法示例
2019/07/25 HTML / CSS
美国知名的网上鞋类及相关服装零售商:Shoes.com
2017/05/06 全球购物
柒牌官方商城:中国男装优秀品牌
2017/06/30 全球购物
经济学人订阅:The Economist
2018/07/19 全球购物
Blank NYC官网:夹克、牛仔裤等
2020/12/16 全球购物
学校经典推荐信
2013/10/30 职场文书
大学毕业生通用自我评价
2014/01/05 职场文书
数控专业大学毕业生职业规划范文
2014/02/06 职场文书
机修工工作职责
2014/02/21 职场文书
2014年小学图书室工作总结
2014/12/09 职场文书
离婚上诉状范文
2015/05/23 职场文书
漂亮妈妈观后感
2015/06/08 职场文书
小学生安全教育心得体会
2016/01/15 职场文书
pytorch 一行代码查看网络参数总量的实现
2021/05/12 Python