第一步:生成文件上传类
/* 该用于文件上传
* 有4个公有方法可以在对象外部调用:
* __construct()构造方法用于初使化成员属性
* uploadfile()方法用于上传文件
* getnewfilename()方法用于获取上传成功后的文件名称
* get世界和平英文errormsg()方法用于上传失败后获取错误提示信息
* 其它属性和方法都被本类封装,不可以在对象外部调用
*/
class fileupload {
private $filepath; // 上传文件的目的路径
private $allowtype = array(‘jpg’,’gif’,’png’); //充许上传文件的类型,使用小字母
private $maxsize = 1000000; //允许文件上传的最大长度1m
private $israndname = true; //是否随机重命名 fal为不随机
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->toption($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 fal;
}
$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->tfiles($name[$i],$tmp_name[$i],$size[$i],$error[$i] )) {//设置文件信息
if(!$this->checkfilesize() || !$this->checkfiletype()){
$errors[]=$this->geterror();
$return=fal;
}
}el{
$errors[]=$this->geterror();
$return=fal;
}
if(!$return) // 如果有问题,则重新初使化属性
$this->tfiles();
}
if($return){
$filenames=array(); //存放所有上传后文件名的变量数组
for($i = 0; $i < count($name); $i++){
if($this->tfiles($name[$i],$tmp_name[$i],$size[$i],$error[$i] )) {//设置文件信息
$this->tnewfilename(); //设置新文件名
if(!$this->copyfile()){
$errors[]=$this->geterror();
$return=fal;
}
$filenames[]=$this->newfilename;
}
}
$this->newfilename=$filenames;
}
$this->errormess=$errors;
return $return;
} el {
if($this->tfiles($name,$tmp_name,$size,$error)) {//设置文件信息
if($this->checkfilesize() && $this->checkfiletype()){
$this->tnewfilename(); //设置新文件名
if($this->copyfile()){ //上传文件 返回0为成功, 小于0都为错误
return true;
}el{
echo ‘3333333333333’;
$return=fal;
}
}el{
$return=fal;
}
} el {
$return=fal;
}
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) {
ca 4: $str .= “没有文件被上传”; break;
ca 3: $str .= “文件只有部分被上传”; break;
ca 2: $str .= “上传文件的大小超过了 html 表单中 max_file_size 选项指定的值”; break;
ca 1: $str .= “上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值”; break;
ca -1: $str .= “未允许类型”; break;
ca -2: $str .= “文件过大,上传的文件不能超过{$this->maxsize}个字节”; break;
ca -3: $str .= “上传失败”; break;
ca -4: $str .= “建立存放上传文件目录失败,请重新指定上传目录”; break;
ca -5: $str .= “必须指定上传文件的路径”; break;
default: $str .= “未知错误”;
}
return $str.'<br>’;
}
//设置和$_files有关的内容
private function tfiles($name=””, $tmp_name=””, $size=0, $error=0) {
$this->toption(‘errornum’, $error);
if($error)
return fal;
$this->toption(‘originname’, $name);
$this->toption(‘tmpfilename’,$tmp_name);
$arystr = explode(“.”, $name);
$this->toption(‘filetype’, strtolower($arystr[count($arystr)-1]));
$this->toption(‘filesize’, $size);
return true;
}
//为单个成员属性设置值
private function toption($key, $val) {
$this->$key = $val;
}
//设置上传后的文件名称
private functi乙醛的银镜反应on tnewfilename() {
if ($this->israndname) {
$this->toption(‘newfilename’, $this->prorandname());
} el{
$this->toption(‘newfilename’, $this->originname);
}
}
//检查上传的文件是否是合法的类型
private function checkfiletype() {
if (in_array(strtolower($this->filetype), $this->allowtype)) {
return true;
}el {
$this->toption(‘errornum’, -1);
return fal;
}
}
//检查上传的文件是否是允许的大小
private function checkfilesize() {
if ($this->filesize > $this->maxsize) {
$this->toption(‘errornum’, -2);
return fal;
}el{
return true;
}
}
//检查是否有存放上传文件的目录
private function checkfilepath() {
if(empty($this->filepath)){
$this->toption(‘errornum’, -5);
return fal;
}
if (!file_exists($this->filepath) || !is_writable($this->filepath)) {
if (!@mkdir($this->filepath, 0755)) {
$this->toption(‘errornum’, -4);
return fal;
}
}
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;
}el{
$this->toption(‘errornum’, -3);
return fal;
}
} el {
return fal;
}
}
}
第二步:生成图像处理类
class image {
private $path;
//构造方法用来对图片所在位置进行初使化
function __construct($path=”./”){
$this->path=rtrim($path, “/”).”/”;
}
/* 对图片进行缩放
*
* 参数$name: 是需要处理的图片名称
* 参数$width:是缩放后的宽度
* 参数$height:是缩放后的高度
* 参数$qz: 是新图片的名称前缀
* 返回值:就是缩放后的图片名称,失败则返回fal
*
*/
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”]){
ca 1://gif
$result=imagegif($newimg, $this->path.$newname);
break;
ca 2://jpg
$result=imagejpeg($newimg, $this->path.$newname);
break;
ca 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”]);
}el{
$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”]){
ca 1: //gif
$img=imagecreatefromgif($srcpic);
break;
ca 2: //jpg
$img=imagecreatefromjpeg($srcpic);
break;
ca 3: //png
$img=imagecreatefrompng($srcpic);
break;
default:
return fal;
}
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) &&什么是论据amp; 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);
}el{
echo “图片或水印图片不存在”;
return fal;
}
}
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 fal;
}
switch($waterpos){
ca 1:
$posx=0;
$posy=0;
break;
ca 2:
$posx=($groundinfo[“width”]-$waterinfo[“width”])/2;
$posy=0;
break;
ca 3:
$posx=$groundinfo[“width”]-$waterinfo[“width”];
$posy=0;
break;
ca 4:
4月你好图片$posx=0;
$posy=($groundinfo[“height”]-$waterinfo[“height”]) /2;
break;
ca 5:
$posx=($groundinfo[“width”]-$waterinfo[“width”])/2;
$posy=($groundinfo[“height”]-$waterinfo[“height”]) /2;
break;
ca 6:
$posx=$groundinfo[“width”]-$waterinfo[“width”];
$posy=($groundinfo[“height”]-$waterinfo[“height”]) /2;
break;
ca 7:
$posx=0;
$posy=$groundinfo[“height”]-$waterinfo[“height”];
break;
ca 8:
$posx=($groundinfo[“width”]-$waterinfo[“width”])/2;
$posy=$groundinfo[“height”]-$waterinfo[“height”];
break;
ca 9:
$posx=$groundinfo[“width”]-$waterinfo[“width”];
$posy=$groundinfo[“height”]-$waterinfo[“height”];
break;
ca 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, “”);
}el{
echo $up->geterrormsg();
}
本文发布于:2023-04-05 23:59:59,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/0bd8c2d9cf46645678bcc26ed305ca8c.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:php多图上传插件(最简单的上传php文件).doc
本文 PDF 下载地址:php多图上传插件(最简单的上传php文件).pdf
留言与评论(共有 0 条评论) |