当前位置:首页 > 生活百科

php多图上传插件(最简单的上传php文件)

栏目:生活百科日期:2024-12-15浏览:0

第一步:生成文件上传类

/* 该用于文件上传

* 有4个公有方法可以在对象外部调用:

* __construct()构造方法用于初使化成员属性

* uploadFile()方法用于上传文件

* getNewFileName()方法用于获取上传成功后的文件名称

* getErrorMsg()方法用于上传失败后获取错误提示信息

* 其它属性和方法都被本类封装,不可以在对象外部调用

*/

class FileUpload {

private $filepath; // 上传文件的目的路径

private $allowtype = array(&‘jpg&’,&’gif&’,&’png&’); //充许上传文件的类型,使用小字母

private $maxsize = 1000000; //允许文件上传的最大长度1m

private $israndname = true; //是否随机重命名 false为不随机

private $originName; //源文件名

private $tmpFileName; //临时文件名

private $fileType; //文件类型(文件后缀)

private $fileSize; //文件大小

private $newFileName; //新文件名

private $errorNum = 0; //错误号

private $errorMess=&”&”; //错误报告消息

/* 构造方法:为成员属性初使化

* 参数$options:为一个数组,数组下标为成员员属性名称字符串

* 本类需要初使化的属性有 filepath, allowtype, maxsize,israndname四个属性,其中filepath为必须设置的属性

* 使用的格式为 new FileUpload(array(&‘filepath&’=&>&’./uploads&’, &‘maxsize&’=&>10000000)) 的格式

*/

function __construct($options=array()) {

foreach ($options as $key=&>$val) {

$key=strtolower($key); //在为成员属性设置值时,不区分大小写

if (!in_array($key,get_class_vars(get_class($this))))

continue;

$this-&>setOption($key, $val);

}

}

/* 调用该方法上传文件

* 参数: 上传文件的表单名称 例如:&<input type=&”file&” name=&”myfile&”&> 参数则为myfile

* 返回值: 如果上传成功返回数字0,如果上传失败则返回小于0的数,如:-1、-2、-3、-4、-5中的一个

*/

function uploadFile($fileField) {

$return=true;

if(!$this-&>checkFilePath()) {//检查文件路径

$this-&>errorMess=$this-&>getError();

return false;

}

$name=$_FILES[$fileField][&‘name&’];

$tmp_name=$_FILES[$fileField][&‘tmp_name&’];

$size=$_FILES[$fileField][&‘size&’];

$error=$_FILES[$fileField][&‘error&’];

if(is_Array($name)){ //如果是多个文件上传则$file[&“name&”]会是一个数组

$errors=array();

for($i = 0; $i &< count($name); $i++){

if($this-&>setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i] )) {//设置文件信息

if(!$this-&>checkFileSize() || !$this-&>checkFileType()){

$errors[]=$this-&>getError();

$return=false;

}

}else{

$errors[]=$this-&>getError();

$return=false;

}

if(!$return) // 如果有问题,则重新初使化属性

$this-&>setFiles();

}

if($return){

$fileNames=array(); //存放所有上传后文件名的变量数组

for($i = 0; $i &< count($name); $i++){

if($this-&>setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i] )) {//设置文件信息

$this-&>setNewFileName(); //设置新文件名

if(!$this-&>copyFile()){

$errors[]=$this-&>getError();

$return=false;

}

$fileNames[]=$this-&>newFileName;

}

}

$this-&>newFileName=$fileNames;

}

$this-&>errorMess=$errors;

return $return;

} else {

if($this-&>setFiles($name,$tmp_name,$size,$error)) {//设置文件信息

if($this-&>checkFileSize() &&&& $this-&>checkFileType()){

$this-&>setNewFileName(); //设置新文件名

if($this-&>copyFile()){ //上传文件 返回0为成功, 小于0都为错误

return true;

}else{

echo &‘3333333333333&’;

$return=false;

}

}else{

$return=false;

}

} else {

$return=false;

}

if(!$return)

$this-&>errorMess=$this-&>getError();

return $return;

}

}

/* 获取上传后的文件名称

* 没有参数

* 返回值:上传后,新文件的名称

*/

public function getNewFileName(){

return $this-&>newFileName;

}

public function getErrorMsg(){

return $this-&>errorMess;

}

/* 上传失败后,调用该方法则返回,上传出错信息

* 没有参数

* 返回值:返回上传文件出错的信息提示

*/

private function getError() {

$str = &“上传文件&<font color=&’red&’&>{$this-&>originName}&</font&>时出错 : &“;

switch ($this-&>errorNum) {

case 4: $str .= &“没有文件被上传&”; break;

case 3: $str .= &“文件只有部分被上传&”; break;

case 2: $str .= &“上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值&”; break;

case 1: $str .= &“上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值&”; break;

case -1: $str .= &“未允许类型&”; break;

case -2: $str .= &“文件过大,上传的文件不能超过{$this-&>maxsize}个字节&”; break;

case -3: $str .= &“上传失败&”; break;

case -4: $str .= &“建立存放上传文件目录失败,请重新指定上传目录&”; break;

case -5: $str .= &“必须指定上传文件的路径&”; break;

default: $str .= &“未知错误&”;

}

return $str.'&<br&>&’;

}

//设置和$_FILES有关的内容

private function setFiles($name=&”&”, $tmp_name=&”&”, $size=0, $error=0) {

$this-&>setOption(&‘errorNum&’, $error);

if($error)

return false;

$this-&>setOption(&‘originName&’, $name);

$this-&>setOption(&‘tmpFileName&’,$tmp_name);

$aryStr = explode(&“.&”, $name);

$this-&>setOption(&‘fileType&’, strtolower($aryStr[count($aryStr)-1]));

$this-&>setOption(&‘fileSize&’, $size);

return true;

}

//为单个成员属性设置值

private function setOption($key, $val) {

$this-&>$key = $val;

}

//设置上传后的文件名称

private function setNewFileName() {

if ($this-&>israndname) {

$this-&>setOption(&‘newFileName&’, $this-&>proRandName());

} else{

$this-&>setOption(&‘newFileName&’, $this-&>originName);

}

}

//检查上传的文件是否是合法的类型

private function checkFileType() {

if (in_array(strtolower($this-&>fileType), $this-&>allowtype)) {

return true;

}else {

$this-&>setOption(&‘errorNum&’, -1);

return false;

}

}

//检查上传的文件是否是允许的大小

private function checkFileSize() {

if ($this-&>fileSize &> $this-&>maxsize) {

$this-&>setOption(&‘errorNum&’, -2);

return false;

}else{

return true;

}

}

//检查是否有存放上传文件的目录

private function checkFilePath() {

if(empty($this-&>filepath)){

$this-&>setOption(&‘errorNum&’, -5);

return false;

}

if (!file_exists($this-&>filepath) || !is_writable($this-&>filepath)) {

if (!@mkdir($this-&>filepath, 0755)) {

$this-&>setOption(&‘errorNum&’, -4);

return false;

}

}

return true;

}

//设置随机文件名

private function proRandName() {

$fileName=date(&‘YmdHis&’).&”_&”.rand(100,999); //获取随机文件名

return $fileName.&’.&’.$this-&>fileType; //返回文件名加原扩展名

}

//复制上传文件到指定的位置

private function copyFile() {

if(!$this-&>errorNum) {

$filepath = rtrim($this-&>filepath, &‘/&’).&’/&’;

$filepath .= $this-&>newFileName;

if (@move_uploaded_file($this-&>tmpFileName, $filepath)) {

return true;

}else{

$this-&>setOption(&‘errorNum&’, -3);

return false;

}

} else {

return false;

}

}

}

第二步:生成图像处理类

class Image {

private $path;

//构造方法用来对图片所在位置进行初使化

function __construct($path=&”./&”){

$this-&>path=rtrim($path, &“/&”).&”/&”;

}

/* 对图片进行缩放

*

* 参数$name: 是需要处理的图片名称

* 参数$width:是缩放后的宽度

* 参数$height:是缩放后的高度

* 参数$qz: 是新图片的名称前缀

* 返回值:就是缩放后的图片名称,失败则返回false

*

*/

function thumb($name, $width, $height, $qz=&”th_&”){

//获取图片信息

$imgInfo=$this-&>getInfo($name); //图片的宽度,高度,类型

//获取图片资源, 各种类型的图片都可以创建资源 jpg, gif, png

$srcImg=$this-&>getImg($name, $imgInfo);

//获取计算图片等比例之后的大小, $size[&“width&”], $size[&“height&”]

$size=$this-&>getNewSize($name, $width, $height, $imgInfo);

//获取新的图片资源, 处理一下gif透明背景

$newImg=$this-&>kidOfImage($srcImg, $size, $imgInfo);

//另存为一个新的图片,返回新的缩放后的图片名称

return $this-&>createNewImage($newImg, $qz.$name, $imgInfo);

}

private function createNewImage($newImg, $newName, $imgInfo){

switch($imgInfo[&“type&”]){

case 1://gif

$result=imageGif($newImg, $this-&>path.$newName);

break;

case 2://jpg

$result=imageJPEG($newImg, $this-&>path.$newName);

break;

case 3://png

$return=imagepng($newImg, $this-&>path.$newName);

break;

}

imagedestroy($newImg);

return $newName;

}

private function kidOfImage($srcImg, $size, $imgInfo){

$newImg=imagecreatetruecolor($size[&“width&”], $size[&“height&”]);

$otsc=imagecolortransparent($srcImg);

if($otsc &>=0 &&&& $otsc &<= imagecolorstotal($srcImg)){

$tran=imagecolorsforindex($srcImg, $otsc);

$newt=imagecolorallocate($newImg, $tran[&“red&”], $tran[&“green&”], $tran[&“blue&”]);

imagefill($newImg, 0, 0, $newt);

imagecolortransparent($newImg, $newt);

}

imagecopyresized($newImg, $srcImg, 0, 0, 0, 0, $size[&“width&”], $size[&“height&”], $imgInfo[&“width&”], $imgInfo[&“height&”]);

imagedestroy($srcImg);

return $newImg;

}

private function getNewSize($name, $width, $height, $imgInfo){

$size[&“width&”]=$imgInfo[&“width&”];

$size[&“height&”]=$imgInfo[&“height&”];

//缩放的宽度如果比原图小才重新设置宽度

if($width &< $imgInfo[&“width&”]){

$size[&“width&”]=$width;

}

//缩放的高度如果比原图小才重新设置高度

if($height &< $imgInfo[&“height&”]){

$size[&“height&”]=$height;

}

//图片等比例缩放的算法

if($imgInfo[&“width&”]*$size[&“width&”] &> $imgInfo[&“height&”] * $size[&“height&”]){

$size[&“height&”]=round($imgInfo[&“height&”]*$size[&“width&”]/$imgInfo[&“width&”]);

}else{

$size[&“width&”]=round($imgInfo[&“width&”]*$size[&“height&”]/$imgInfo[&“height&”]);

}

return $size;

}

private function getInfo($name){

$data=getImageSize($this-&>path.$name);

$imageInfo[&“width&”]=$data[0];

$imageInfo[&“height&”]=$data[1];

$imageInfo[&“type&”]=$data[2];

return $imageInfo;

}

private function getImg($name, $imgInfo){

$srcPic=$this-&>path.$name;

switch($imgInfo[&“type&”]){

case 1: //gif

$img=imagecreatefromgif($srcPic);

break;

case 2: //jpg

$img=imageCreatefromjpeg($srcPic);

break;

case 3: //png

$img=imageCreatefrompng($srcPic);

break;

default:

return false;

}

return $img;

}

/* 功能:为图片加水印图片

* 参数$groundName: 背景图片,即需要加水印的图片

* 参数$waterName: 水钱图片

* 参数#aterPost:水印位置, 10种状态,

* 0为随机位置

*

* 1. 为顶端居左 2. 为顶端居中 3 为顶端居右

* 4 为中部居左 5. 为中部居中 6 为中部居右

* 7 . 为底端居左 8. 为底端居中, 9. 为底端居右

*

* 参数$qz : 是加水印后的图片名称前缀

* 返回值:就是处理后图片的名称

*

*/

function waterMark($groundName, $waterName, $waterPos=0, $qz=&”wa_&”){

if(file_exists($this-&>path.$groundName) &&&& file_exists($this-&>path.$waterName)){

$groundInfo=$this-&>getInfo($groundName);

$waterInfo=$this-&>getInfo($waterName);

//水印的位置

if(!$pos=$this-&>position($groundInfo, $waterInfo, $waterPos)){

echo &“水印不应该比背景图片小!&”;

return;

}

$groundImg=$this-&>getImg($groundName, $groundInfo);

$waterImg=$this-&>getImg($waterName, $waterInfo);

$groundImg=$this-&>copyImage($groundImg, $waterImg, $pos, $waterInfo);

return $this-&>createNewImage($groundImg, $qz.$groundName, $groundInfo);

}else{

echo &“图片或水印图片不存在&”;

return false;

}

}

private function copyImage($groundImg, $waterImg, $pos, $waterInfo){

imagecopy($groundImg, $waterImg, $pos[&“posX&”], $pos[&“posY&”], 0, 0, $waterInfo[&“width&”], $waterInfo[&“height&”]);

imagedestroy($waterImg);

return $groundImg;

}

private function position($groundInfo, $waterInfo, $waterPos){

//需要背景比水印图片大

if(($groundInfo[&“width&”]&< $waterInfo[&“width&”]) ||($groundInfo[&“height&”] &< $waterInfo[&“height&”])){

return false;

}

switch($waterPos){

case 1:

$posX=0;

$posY=0;

break;

case 2:

$posX=($groundInfo[&“width&”]-$waterInfo[&“width&”])/2;

$posY=0;

break;

case 3:

$posX=$groundInfo[&“width&”]-$waterInfo[&“width&”];

$posY=0;

break;

case 4:

$posX=0;

$posY=($groundInfo[&“height&”]-$waterInfo[&“height&”]) /2;

break;

case 5:

$posX=($groundInfo[&“width&”]-$waterInfo[&“width&”])/2;

$posY=($groundInfo[&“height&”]-$waterInfo[&“height&”]) /2;

break;

case 6:

$posX=$groundInfo[&“width&”]-$waterInfo[&“width&”];

$posY=($groundInfo[&“height&”]-$waterInfo[&“height&”]) /2;

break;

case 7:

$posX=0;

$posY=$groundInfo[&“height&”]-$waterInfo[&“height&”];

break;

case 8:

$posX=($groundInfo[&“width&”]-$waterInfo[&“width&”])/2;

$posY=$groundInfo[&“height&”]-$waterInfo[&“height&”];

break;

case 9:

$posX=$groundInfo[&“width&”]-$waterInfo[&“width&”];

$posY=$groundInfo[&“height&”]-$waterInfo[&“height&”];

break;

case 0:

default:

$posX=rand(0, ($groundInfo[&“width&”]-$waterInfo[&“width&”]));

$posY=rand(0, ($groundInfo[&“height&”]-$waterInfo[&“height&”]));

break;

}

return array(&“posX&”=&>$posX, &“posY&”=&>$posY);

}

}

第三步:上传表单

&<form action=&”upload.php&” method=&”post&” enctype=&”multipart/form-data&”&>

pic: &<input type=&”file&” name=&”pic&”&>&<br&>

&<input type=&”submit&” name=&”sub&” value=&”uploadpicture&”&>

&</form&>

第四步:上传处理

&<?php

/*

功能:上传图片到指定路径&”./images/&”下

并对指定路径下的图片做图像处理操作!

*/

include &“FileUpload.class.php&”;

include &“image.class.php&”;

$up=new FileUpload(array(&“filepath&”=&>&”./images/&”, &“allowtype&”=&>array(&“gif&”, &“jpg&”, &“png&”)));

if($up-&>uploadFile(&“pic&”)){

$filename=$up-&>getNewFileName();

$img=new Image(&“./images/&”);

$th_filename=$img-&>thumb($filename, 300, 300, &“th_&”);

$img-&>waterMark($th_filename, &“gaolf.gif&”, 5, &“wa_&”);

$img-&>waterMark($filename, &“gaolf.gif&”, 0, &“&”);

}else{

echo $up-&>getErrorMsg();

}

“php多图上传插件(最简单的上传php文件)” 的相关文章

一键ghost还原系统步骤(电脑一键ghost操作方法)

在尝过资料、文件丢失后,相信大多数朋友养成了备份文件的好习惯,那么你知道吗?跟备份文件一样,其实电脑系统也是可以备份的,做好了备份,当系统故障、崩溃时就不怕了,...

免费流程图软件哪个好(自动生成流程图工具推荐)

程序流程图是一种常用的流程图类型。它是一种用特定图形符号,外加文字说明构成的图示。程序流程图的主要结构分为处理框、判断框、起止框、连接点和连接线。程序流程图可...

开源mysql开发工具介绍(mysql开发工具推荐)

前言:随着互联网技术的不断发展,MySQL相关生态也越来越完善,越来越多的工具涌现出来。一些公司或个人纷纷开源出一些不错的工具,本篇文章主要介绍几款MySQL相...

快速清理内存整理工具(清理内存的软件排行榜)

看到这个场面,血压直接就上来了。相信大部分的朋友都有过这种经历:明明C盘并没有安装多少软件,但内存却总在不知不觉的提升,隔段时间不看就直接爆红。后来小雷检查软件...

在线logo设计用什么软件做,免费标志在线设计生成教程

收到一个网友的提问,她说初学者什么都不懂,也下过几个设计的软件但都不是怎么好用,问我有什么适合初学者使用的logo设计软件?于是我就整理了以下这篇文章,帮助大家...

安卓怎么定位手机位置,一招教你精准定位

智能手机现在基本上人手一部,而手机定位这个功能已经非常常见。例如:打车软件的司机可以准确的知道你的位置,就可以规划出一条更好的路线。这是很典型的定位服务应用,某...

三角图怎么看占比(正三角坐标图的判读步骤)

三角形图表图案涉及价格移动到越来越紧范围随着时间的推移和提供的多空之间的战斗的视觉显示。三角形模式通常被归类为“延续模式”,这意味着在模式完成后,假设价格将继续...

pdf读取软件有哪些(读取pdf文件的软件推荐)

生活中,接触的文档有很多都是扫描版的,虽然可以提供阅读,但是想要编辑上面的文字内容还是比较困难的,那么有没有什么办法可以将上面的文字提取下来供我们编辑使用呢?方...

2020年有哪些创业商机,疫情过后爆发的5个行业

现在的人都觉得光靠上班赚的收入不够,于是想找点创业小项目来做,但是好商机有哪些,毕竟整个市场的机会太多太杂,创业好商机可没有这么容易找到,因此,想要获得好商机,...

天龙八部手游助手设置怎么调(天龙八部手游cdkey领取平

《天龙八部2手游》是一款由金庸正版授权的3D真武侠MMORPG手游。通过写实风格、次世代研发技术,力求将武侠世界中的人、物、景、光极致还原,为玩家打造一个前所未...