首页> 基础笔记 >PHP基础学习 >文件处理 文件处理
PHP自定义函数库实现单图上传和多图上传 并对图片等比例压缩
作者:小萝卜 2019-08-27 【 PHP 文件 】 浏览 1081
简介PHP自定义函数库实现单图上传和多图上传 并对图片等比例压缩
PHP自定义函数库实现单图上传和多图上传 并对图片等比例压缩
html:
html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>文件上传实例表单</title>
</head>
<body>
<h2>1.完整的文件上传处理:1.php</h2>
<form action="1-1.php" method="post" enctype="multipart/form-data">
文件:<input type="file" name="pic"/>
<input type="submit" value="上传"/>
</form>
<h2>2.使用函数执行的文件上传处理:2.php</h2>
<form action="2.php" method="post" enctype="multipart/form-data">
文件:<input type="file" name="pic"/>
<input type="submit" value="上传"/>
</form>
<h2>3.多文件上传处理:3.php</h2>
<form action="3.php" method="post" enctype="multipart/form-data">
文件:<input type="file" name="pic1"/><br/><br/>
文件:<input type="file" name="pic2"/><br/><br/>
文件:<input type="file" name="pic3"/><br/><br/>
<input type="submit" value="上传"/>
</form>
<h2>4.多文件上传处理:4.php</h2>
<form action="4.php" method="post" enctype="multipart/form-data">
文件:<input type="file" name="pic[]"/><br/><br/>
文件:<input type="file" name="pic[]"/><br/><br/>
文件:<input type="file" name="pic[]"/><br/><br/>
<input type="submit" value="上传"/>
</form>
<h2>5.HTML5多文件上传处理:4.php</h2>
<form action="4.php" method="post" enctype="multipart/form-data">
文件:<input type="file" multiple name="pic[]"/><br/><br/>
<input type="submit" value="上传"/>
</form>
</body>
</html>
1-1.php
<?php
//完整的文件上传处理
//1. 初始化变量
$upfile = $_FILES['pic']; //获取上传文件信息
$path = "./uploads/"; //上传文件储存目录
$typeList=array("image/jpeg","image/png","image/gif"); //允许的上传文件类型(空数组表示不限制)
$maxSize=0; //表示允许上传文件的大小(默认0表示不限制)
//2. 判断错误号
if($upfile['error']>0){
switch($upfile['error']){
case 1: $info = "上传文件大小超出php.ini的配置"; break;
case 2: $info = "上传文件大小超出表单隐藏的设置"; break;
case 3: $info = "只有部分文件被上传"; break;
case 4: $info = "没有文件上传"; break;
case 6: $info = "找不到临时文件夹"; break;
case 7: $info = "文件写入失败"; break;
default: $info = "未知上传文件错误!"; break;
}
die("文件上传失败!原因:".$info);
}
//3. 过滤上传文件类型
if(count($typeList)>0){
if(!in_array($upfile['type'],$typeList)){
die("文件上传失败!原因:上传文件类型错误!");
}
}
//4. 过滤上传文件大小
if($maxSize>0){
if($maxSize<$upfile['size']){
die("文件上传失败!原因:上传文件大小超出当前配置!");
}
}
//5. 随机上传文件名
$ext = pathinfo($upfile['name'],PATHINFO_EXTENSION); //获取文件的后缀名
do{
$newfile = date("YmdHis").rand(1000,9999).".".$ext; //随机新的文件名
}while(file_exists($path.$newfile)); //判断新文件名是否存在
//6. 执行上传文件处理
//先判断上传文件是否有效
if(is_uploaded_file($upfile['tmp_name'])){
//执行上传文件的移动
if(move_uploaded_file($upfile['tmp_name'],$path.$newfile)){
//表示上传文件成功
echo "上传文件成功!文件名:".$newfile;
}else{
die("上传文件移动失败!");
}
}else{
die("无效的上传文件!");
}
2.php
<?php
//使用自定义函数处理文件上传
//1.导入函数
require("./functions.php");
//2.定义变量,并调用函数执行上传
$typelist = array("image/jpeg","image/pjpeg","image/png","image/gif");
$path="./uploads/";
$res = uploadFile($_FILES['pic'],$path,$typelist);
//3.进行判断是否成功
if($res['error']){
echo "上传成功!文件名:".$res['info'];
}else{
echo "上传失败!原因:".$res['info'];
}
3.php
<?php
//执行多文件上传处理
echo "<pre>";
print_r($_FILES);
//1.导入函数
require("./functions.php");
//2.定义变量,并调用函数执行上传
$typelist = array("image/jpeg","image/pjpeg","image/png","image/gif");
$path="./uploads/";
//遍历上传的文件,进行一个个处理
foreach($_FILES as $upfile){
$res = uploadFile($upfile,$path,$typelist);
//3.进行判断是否成功
if($res['error']){
echo "上传成功!文件名:".$res['info']."<br/>";
}else{
echo "上传失败!原因:".$res['info']."<br/>";
}
}
4.php
<?php
//执行多文件上传处理
echo "<pre>";
print_r($_FILES);
//执行数组转换
$data = array();
foreach($_FILES['pic']['name'] as $k=>$v){
$data[$k]['name']=$v;
$data[$k]['type']=$_FILES['pic']['type'][$k];
$data[$k]['tmp_name']=$_FILES['pic']['tmp_name'][$k];
$data[$k]['error']=$_FILES['pic']['error'][$k];
$data[$k]['size']=$_FILES['pic']['size'][$k];
}
print_r($data);
//1.导入函数
require("./functions.php");
//2.定义变量,并调用函数执行上传
$typelist = array("image/jpeg","image/pjpeg","image/png","image/gif");
$path="./uploads/";
//遍历上传的文件,进行一个个处理
foreach($data as $upfile){
$res = uploadFile($upfile,$path,$typelist);
//3.进行判断是否成功
if($res['error']){
echo "上传成功!文件名:".$res['info']."<br/>";
}else{
echo "上传失败!原因:".$res['info']."<br/>";
}
}
functionn.php
<?php
//公共函数库文件
/**
* 文件上传处理函数
*@param array $upfile 被上传的文件信息:如:$_FILES['pic']
*@param string $path 上传文件存储目录
*@param array $typeList 允许上传文件类型,默认array()表示不限制类型
* 例如图片类型限制:array("image/jpeg","image/png","image/gif");
*@param int $maxSize 允许上传文件大小限制 默认值0表示不限制
*@return 返回结果是一个数组:格式两个单元的数组
* 下标: "error"=>true表示成功,false表示失败
* "info" =>成功的文件名,或失败的消息。
*/
function uploadFile($upfile,$path,$typeList=array(),$maxSize=0){
//1. 初始化变量
$path = rtrim($path,"/")."/"; //处理上传目录
$res = array("error"=>false,"info"=>""); //定义返回结果
//2. 判断错误号
if($upfile['error']>0){
switch($upfile['error']){
case 1: $info = "上传文件大小超出php.ini的配置"; break;
case 2: $info = "上传文件大小超出表单隐藏的设置"; break;
case 3: $info = "只有部分文件被上传"; break;
case 4: $info = "没有文件上传"; break;
case 6: $info = "找不到临时文件夹"; break;
case 7: $info = "文件写入失败"; break;
default: $info = "未知上传文件错误!"; break;
}
$res['info']=$info;
return $res;
}
//3. 过滤上传文件类型
if(count($typeList)>0){
if(!in_array($upfile['type'],$typeList)){
$res['info']="上传文件类型错误!";
return $res;
}
}
//4. 过滤上传文件大小
if($maxSize>0){
if($maxSize<$upfile['size']){
$res['info']="上传文件大小超出当前配置!";
return $res;
}
}
//5. 随机上传文件名
$ext = pathinfo($upfile['name'],PATHINFO_EXTENSION); //获取文件的后缀名
do{
$newfile = date("YmdHis").rand(1000,9999).".".$ext; //随机新的文件名
}while(file_exists($path.$newfile)); //判断新文件名是否存在
//6. 执行上传文件处理
//先判断上传文件是否有效
if(is_uploaded_file($upfile['tmp_name'])){
//执行上传文件的移动
if(move_uploaded_file($upfile['tmp_name'],$path.$newfile)){
//表示上传文件成功
$res['info']=$newfile;
$res['error']=true;
}else{
$res['info']="上传文件移动失败!";
}
}else{
$res['info']="无效的上传文件!";
}
return $res;
}
/**
*自定义一个图片等比缩放函数
*@param string $picname 被缩放图片名
*@param string $path 被缩放图片路径
*@param int $maxWidth 图片被缩放后的最大宽度
*@param int $maxHeight 图片被缩放后的最大高度
*@param string $pre 缩放后的图片名前缀,默认为"s_"
*@param boolen 返回布尔值表示成功与否。
*/
function imageResize($picname,$path,$maxWidth,$maxHeight,$pre="s_"){
$path = rtrim($path,"/")."/";
//1获取被缩放的图片信息
$info = getimagesize($path.$picname);
//获取图片的宽和高
$width = $info[0];
$height = $info[1];
//2根据图片类型,使用对应的函数创建画布源。
switch($info[2]){
case 1: //gif格式
$srcim = imagecreatefromgif($path.$picname);
break;
case 2: //jpeg格式
$srcim = imagecreatefromjpeg($path.$picname);
break;
case 3: //png格式
$srcim = imagecreatefrompng($path.$picname);
break;
default:
return false;
//die("无效的图片格式");
break;
}
//3. 计算缩放后的图片尺寸
if($maxWidth/$width<$maxHeight/$height){
$w = $maxWidth;
$h = ($maxWidth/$width)*$height;
}else{
$w = ($maxHeight/$height)*$width;
$h = $maxHeight;
}
//4. 创建目标画布
$dstim = imagecreatetruecolor($w,$h);
//5. 开始绘画(进行图片缩放)
imagecopyresampled($dstim,$srcim,0,0,0,0,$w,$h,$width,$height);
//6. 输出图像另存为
switch($info[2]){
case 1: //gif格式
imagegif($dstim,$path.$pre.$picname);
break;
case 2: //jpeg格式
imagejpeg($dstim,$path.$pre.$picname);
break;
case 3: //png格式
imagepng($dstim,$path.$pre.$picname);
break;
}
//7. 释放资源
imagedestroy($dstim);
imagedestroy($srcim);
return true;
}
很赞哦! (0)
上一篇:PHP文件上传和下载学习总结
下一篇:PHP实现文件的下载