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自定义函数返回多个值
Nov 26 PHP
linux php mysql数据库备份实现代码
Mar 10 PHP
php中json_decode()和json_encode()的使用方法
Jun 04 PHP
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
Apr 21 PHP
PHP实现单例模式最安全的做法
Jun 13 PHP
ThinkPHP CURD方法之field方法详解
Jun 18 PHP
解析PHP强制转换类型及远程管理插件的安全隐患
Jun 30 PHP
php使用session二维数组实例
Nov 06 PHP
php函数与传递参数实例分析
Nov 15 PHP
PHP读取PPT文件的方法
Dec 10 PHP
PHP中上传文件打印错误错误类型分析
Apr 14 PHP
laravel 解决路由除了根目录其他都404的问题
Oct 18 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
关于PHPDocument 代码注释规范的总结
2013/06/25 PHP
php header功能的使用
2013/10/28 PHP
php中http与https跨域共享session的解决方法
2014/12/20 PHP
php+jQuery.uploadify实现文件上传教程
2014/12/26 PHP
php实现根据词频生成tag云的方法
2015/04/17 PHP
php+mysql实现的二级联动菜单效果详解
2016/05/10 PHP
Yii2验证器(Validator)用法分析
2016/07/23 PHP
浅谈PHP各环境下的伪静态配置
2019/03/13 PHP
PHP+redis实现微博的拉模型案例详解
2019/07/10 PHP
JavaScript函数、方法、对象代码
2008/10/29 Javascript
javascript 数据类型转换(parseInt,parseFloat)
2010/07/20 Javascript
jquery插件之信息弹出框showInfoDialog(成功/错误/警告/通知/背景遮罩)
2013/01/09 Javascript
jquery cookie实现的简单换肤功能适合小网站
2013/08/25 Javascript
通过遮罩层实现浮层DIV登录的js代码
2014/02/07 Javascript
JavaScript实现关键字高亮功能
2014/11/12 Javascript
全面解析Bootstrap排版使用方法(文字样式)
2015/11/30 Javascript
Javascript学习之谈谈JS的全局变量跟局部变量(推荐)
2016/08/28 Javascript
weebox弹出窗口不居中显示的解决方法
2017/11/27 Javascript
动手写一个angular版本的Message组件的方法
2017/12/16 Javascript
vue的style绑定background-image的方式和其他变量数据的区别详解
2018/09/03 Javascript
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
2015/03/30 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
2017/08/05 Python
django Serializer序列化使用方法详解
2018/10/16 Python
Django框架模板文件使用及模板文件加载顺序分析
2019/05/23 Python
Python3自定义json逐层解析器代码
2020/05/11 Python
博柏利美国官方网站:Burberry美国
2020/11/19 全球购物
英语专业大学生求职简历的自我评价
2013/10/18 职场文书
高中毕业生自我鉴定
2013/11/03 职场文书
行政管理毕业生自荐信
2014/02/24 职场文书
市政管理求职信范文
2014/05/07 职场文书
环境科学专业求职信
2014/08/04 职场文书
个人授权委托书
2014/09/15 职场文书
刘公岛导游词
2015/02/05 职场文书
2015年安置帮教工作总结
2015/05/22 职场文书
django中websocket的具体使用
2022/01/22 Python
Sql Server 行数据的某列值想作为字段列显示的方法
2022/04/20 SQL Server