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和XSL stylesheets转换XML文档
Oct 09 PHP
PHP中for循环语句的几种变型
Nov 26 PHP
解决GD中文乱码问题
Feb 14 PHP
提高PHP编程效率 引入缓存机制提升性能
Feb 15 PHP
php中0,null,empty,空,false,字符串关系的详细介绍
Jun 20 PHP
浅谈php函数serialize()与unserialize()的使用方法
Aug 19 PHP
CI框架装载器Loader.php源码分析
Nov 04 PHP
php字符串替换函数substr_replace()用法实例
Mar 17 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
Jun 20 PHP
YII Framework框架教程之安全方案详解
Mar 14 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
Jan 12 PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
Oct 12 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中JSON的使用方法
2015/04/30 PHP
CakePHP框架Session设置方法分析
2017/02/23 PHP
php实现解析xml并生成sql语句的方法
2018/02/03 PHP
PHP实现简单登录界面
2019/10/23 PHP
PHP 计算两个时间段之间交集的天数示例
2019/10/24 PHP
基于jQuery实现点击同时更改两个iframe的网址
2010/07/01 Javascript
jQuery Ajax使用 全解析
2010/12/15 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
什么是cookie?js手动创建和存储cookie
2014/05/27 Javascript
nodejs通过phantomjs实现下载网页
2015/05/04 NodeJs
jquery实现叠层3D文字特效代码分享
2015/08/21 Javascript
在ASP.NET MVC项目中使用RequireJS库的用法示例
2016/02/15 Javascript
Dojo获取下拉框的文本和值实例代码
2016/05/27 Javascript
Bootstrap框架下下拉框select搜索功能
2020/03/26 Javascript
JS双击变input框批量修改内容
2016/12/12 Javascript
vue-resource + json-server模拟数据的方法
2017/11/02 Javascript
NodeJs项目中关闭ESLint的方法
2018/08/09 NodeJs
详解nodejs 配置文件处理方案
2019/01/02 NodeJs
weui上传多图片,压缩,base64编码的示例代码
2020/06/22 Javascript
[01:11:15]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
基于python编写的微博应用
2014/10/17 Python
Python的collections模块中的OrderedDict有序字典
2016/07/07 Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
2017/05/24 Python
详解python中的json和字典dict
2018/06/22 Python
Python异常的检测和处理方法
2018/10/26 Python
Python字符串中删除特定字符的方法
2020/01/15 Python
通过实例了解Python str()和repr()的区别
2020/01/17 Python
HTML5拖放功能_动力节点Java学院整理
2017/07/13 HTML / CSS
Html5 页面适配iPhoneX(就是那么简单)
2019/09/05 HTML / CSS
Bluebella美国官网:英国性感内衣品牌
2018/10/04 全球购物
一些.net面试题
2014/10/06 面试题
总裁助理岗位职责
2014/02/17 职场文书
酒店端午节促销方案
2014/02/18 职场文书
九华山导游词
2015/02/03 职场文书
简单谈谈Python面向对象的相关知识
2021/06/28 Python
索尼ICF-36收音机评测
2022/04/30 无线电