php 上传图片

学习地址:http://www.imooc.com/video/2473

<?php 
header("content-type:text/html;charset=utf-8");

/**
 * 生成唯一字符串
 * @return string
 */
function getUniName(){
    return md5(uniqid(microtime(true),true));
}

/**
 * 得到文件的扩展名
 * @param string $filename
 * @return string
 */
function getExt($filename){
    return strtolower(end(explode(".",$filename)));
}



//$_FILES
$filename=$_FILES['myFile']['name'];
$type=$_FILES['myFile']['type'];
$tmp_name=$_FILES['myFile']['tmp_name'];
$error=$_FILES['myFile']['error'];
$size=$_FILES['myFile']['size'];
$allowExt=array("gif","jpeg","jpg","png","wbmp");
$maxSize=1512000;
$imgFlag=true;
//判断下错误信息
if($error==UPLOAD_ERR_OK){
    $ext=getExt($filename);
    //限制上传文件类型
    if(!in_array($ext,$allowExt)){
        exit ("非法文件类型");
    }
    if($size>$maxSize){
        exit ("文件过大");
    }
    if($imgFlag){
        //如何验证图片是否是一个真正的图片类型
        //getimagesize($filename):验证文件是否是图片类型
        $info=getimagesize($tmp_name);
        //var_dump($info);exit;
        if(!$info){
            exit("不是真正的图片类型");
        }
    }
    //需要判断下文件是否是通过HTTP POST方式上传上来的
    //is_uploaded_file($tmp_name):
    
    $filename=getUniName().".".$ext;
    $path="uploads";
    if(!file_exists($path)){
        mkdir($path,0777,true);
    }
    $destination=$path."/".$filename;
    if(is_uploaded_file($tmp_name)){
        if(move_uploaded_file($tmp_name, $destination)){
            $mes="文件上传成功";
        }else{
            $mes="文件移动失败";
        }
    }else{
        $mes="文件不是通过HTTP POST方式上传上来的";
    }
}else{
    switch($error){
        case 1:
            $mes="超过了配置文件上传文件的大小";//UPLOAD_ERR_INI_SIZE
            break;
        case 2:
            $mes="超过了表单设置上传文件的大小";            //UPLOAD_ERR_FORM_SIZE
            break;
        case 3:
            $mes="文件部分被上传";//UPLOAD_ERR_PARTIAL
            break;
        case 4:
            $mes="没有文件被上传";//UPLOAD_ERR_NO_FILE
            break;
        case 6:
            $mes="没有找到临时目录";//UPLOAD_ERR_NO_TMP_DIR
            break;
        case 7:
            $mes="文件不可写";//UPLOAD_ERR_CANT_WRITE;
            break;
        case 8:
            $mes="由于PHP的扩展程序中断了文件上传";//UPLOAD_ERR_EXTENSION
            break;
            
            
            
    }
}
echo $mes;
//服务器端进行的配置
//1》file_uploads = On,支持通过HTTP POST方式上传文件
//2》;upload_tmp_dir =临时文件保存目录
//3》upload_max_filesize = 2M默认值是2M,上传的最大大小2M
//4》post_max_size = 8M,表单以POST方式发送数据的最大值,默认8M
//客户端进行配置,form表单必须是post,也必须有enctype="multipart/form-data"
// <form action="doAction1.php" method="post" enctype="multipart/form-data">
//     请选择上传文件:<input type="file"  name="myFile"  /><br/>
//     <input type="submit" value="上传"/>
// </form>

函数封装版本

header("content-type:text/html;charset=utf-8");

/**
 * 生成唯一字符串
 * @return string
 */
function getUniName(){
    return md5(uniqid(microtime(true),true));
}

/**
 * 得到文件的扩展名
 * @param string $filename
 * @return string
 */
function getExt($filename){
    return strtolower(end(explode(".",$filename)));
}
 


function uploadFile($fileInfo,$path="uploads",$allowExt=array("gif","jpeg","jpg","png","wbmp"),$maxSize=1512000,$imgFlag=true){
        //判断下错误信息
        if($fileInfo['error']==UPLOAD_ERR_OK){
            $ext=getExt($fileInfo['name']);
            //限制上传文件类型
            if(!in_array($ext,$allowExt)){
                exit ("非法文件类型");
            }
            if($fileInfo['size']>$maxSize){
                exit ("文件过大");
            }
            if($imgFlag){
                //如何验证图片是否是一个真正的图片类型
                //getimagesize($filename):验证文件是否是图片类型
                $info=getimagesize($fileInfo['tmp_name']);
                //var_dump($info);exit;
                if(!$info){
                    exit("不是真正的图片类型");
                }
            }
            $filename=getUniName().".".$ext;
            if(!file_exists($path)){
                mkdir($path,0777,true);
            }
            $destination=$path."/".$filename;
            if(is_uploaded_file($fileInfo['tmp_name'])){
                if(move_uploaded_file($fileInfo['tmp_name'], $destination)){
                    $mes="文件上传成功";
                }else{
                    $mes="文件移动失败";
                }
            }else{
                $mes="文件不是通过HTTP POST方式上传上来的";
            }
        }else{
            switch($fileInfo['error']){
                case 1:
                    $mes="超过了配置文件上传文件的大小";//UPLOAD_ERR_INI_SIZE
                    break;
                case 2:
                    $mes="超过了表单设置上传文件的大小";            //UPLOAD_ERR_FORM_SIZE
                    break;
                case 3:
                    $mes="文件部分被上传";//UPLOAD_ERR_PARTIAL
                    break;
                case 4:
                    $mes="没有文件被上传";//UPLOAD_ERR_NO_FILE
                    break;
                case 6:
                    $mes="没有找到临时目录";//UPLOAD_ERR_NO_TMP_DIR
                    break;
                case 7:
                    $mes="文件不可写";//UPLOAD_ERR_CANT_WRITE;
                    break;
                case 8:
                    $mes="由于PHP的扩展程序中断了文件上传";//UPLOAD_ERR_EXTENSION
                    break;
            }
        }
        return $mes;
}

使用方法:

header("content-type:text/html;charset=utf-8");
$fileInfo=$_FILES['myFile'];
$info=uploadFile($fileInfo);
echo $info;

 单文件多上传

#html代码示例
<form action="doAction2.php" method="post" enctype="multipart/form-data"> 请选择上传文件:<input type="file" name="myFile1" /><br/> 请选择上传文件:<input type="file" name="myFile2" /><br/> 请选择上传文件:<input type="file" name="myFile3" /><br/> <input type="submit" value="上传"/> </form> #你需要先引用上面的封装几个函数的文件 foreach($_FILES as $val){ $mes=uploadFile($val); echo $mes; }

单文件、数组文件上传封装

<?php 


header("content-type:text/html;charset=utf-8");

/**
 * 生成唯一字符串
 * @return string
 */
function getUniName(){
    return md5(uniqid(microtime(true),true));
}

/**
 * 得到文件的扩展名
 * @param string $filename
 * @return string
 */
function getExt($filename){
    return strtolower(end(explode(".",$filename)));
}




/**
 * 构建上传文件信息
 * @return array
 */
function buildInfo(){
    if(!$_FILES){
        return ;
    }
    $i=0;
    foreach($_FILES as $v){
        //单文件,因为如果是多文件数组上传的话这个值会是一个数组类型
        if(is_string($v['name'])){
            $files[$i]=$v;
            $i++;
        }else{
            //多文件
            foreach($v['name'] as $key=>$val){
                $files[$i]['name']=$val;
                $files[$i]['size']=$v['size'][$key];
                $files[$i]['tmp_name']=$v['tmp_name'][$key];
                $files[$i]['error']=$v['error'][$key];
                $files[$i]['type']=$v['type'][$key];
                $i++;
            }
        }
    }
    return $files;
}

function uploadFile($path="uploads",$allowExt=array("gif","jpeg","png","jpg","wbmp"),$maxSize=2097152,$imgFlag=true){
    if(!file_exists($path)){
        mkdir($path,0777,true);
    }
    $i=0;
    $files=buildInfo();
    if(!($files&&is_array($files))){
        return ;
    }
    foreach($files as $file){
        if($file['error']===UPLOAD_ERR_OK){
            $ext=getExt($file['name']);
            //检测文件的扩展名
            if(!in_array($ext,$allowExt)){
                exit("非法文件类型");
            }
            //校验是否是一个真正的图片类型
            if($imgFlag){
                if(!getimagesize($file['tmp_name'])){
                    exit("不是真正的图片类型");
                }
            }
            //上传文件的大小
            if($file['size']>$maxSize){
                exit("上传文件过大");
            }
            if(!is_uploaded_file($file['tmp_name'])){
                exit("不是通过HTTP POST方式上传上来的");
            }
            $filename=getUniName().".".$ext;
            $destination=$path."/".$filename;
            if(move_uploaded_file($file['tmp_name'], $destination)){
                $file['name']=$filename;
                unset($file['tmp_name'],$file['size'],$file['type']);
                $uploadedFiles[$i]=$file;
                $i++;
            }
        }else{
            switch($file['error']){
                    case 1:
                        $mes="超过了配置文件上传文件的大小";//UPLOAD_ERR_INI_SIZE
                        break;
                    case 2:
                        $mes="超过了表单设置上传文件的大小";            //UPLOAD_ERR_FORM_SIZE
                        break;
                    case 3:
                        $mes="文件部分被上传";//UPLOAD_ERR_PARTIAL
                        break;
                    case 4:
                        $mes="没有文件被上传1111";//UPLOAD_ERR_NO_FILE
                        break;
                    case 6:
                        $mes="没有找到临时目录";//UPLOAD_ERR_NO_TMP_DIR
                        break;
                    case 7:
                        $mes="文件不可写";//UPLOAD_ERR_CANT_WRITE;
                        break;
                    case 8:
                        $mes="由于PHP的扩展程序中断了文件上传";//UPLOAD_ERR_EXTENSION
                        break;
                }
                echo $mes;
            }
    }
    return $uploadedFiles;
}

 使用方法

#html
<form action="doAction3.php" method="post" enctype="multipart/form-data">

    请选择上传文件:<input type="file"  name="myFile[]"  /><br/>
    请选择上传文件:<input type="file"  name="myFile[]"  /><br/>
    请选择上传文件:<input type="file"  name="myFile[]"  /><br/>
    请选择上传文件:<input type="file"  name="myFile1"  /><br/>
    请选择上传文件:<input type="file"  name="myFile2"  /><br/>
    <input type="submit" value="上传"/>
</form>

#你需要先引用上面的封装几个函数的文件
foreach($_FILES as $val){
    $mes=uploadFile($val);
    echo $mes;
}
原文地址:https://www.cnblogs.com/CyLee/p/5725505.html