首页> 基础笔记 >PHP基础学习 >文件处理 文件处理

PHP自定义函数库实现单图上传和多图上传 并对图片等比例压缩

作者:小萝卜 2019-08-27 浏览 1081

简介PHP自定义函数库实现单图上传和多图上传 并对图片等比例压缩

PHP自定义函数库实现单图上传和多图上传 并对图片等比例压缩
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)

文章评论

    高端网站建设