PHP多文件上传代码练习

HTML表单:

<html>
    <head><title>upload file</title>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    </head>
    <body>
        <form action="test.php" method="post" enctype="multipart/form-data">
            <!-- name必须是MAX_FILE_SIZE,value是字节数 -->
            <input type="hidden" name="MAX_FILE_SIZE" value="2097152"/>
            <!-- accept是文件的MIME类型 -->
            <!-- nultiple="nultiple" 是代表可以多选 -->
            <input type="file" name="fileName[]"  multiple="multiple" accept="image/jpeg,image/gif,image/png,application/x-MS-bmp,text/plain,text/html" /><br><br>
            <input type="submit" value="上传文件"/>
        </form>
    </body>
</html>

 

PHP多文件上传函数表单uploads.func.php

<?php

function getFiles(){

    //把三维数组改成两维数组;
    $i=0;
    foreach ($_FILES as $file) {

        if (is_array($file[‘name‘])) {

            foreach($file[‘name‘] as $key=>$value){
                $files[$i][‘name‘]=$file[‘name‘][$key];
                $files[$i][‘type‘]=$file[‘type‘][$key];
                $files[$i][‘tmp_name‘]=$file[‘tmp_name‘][$key];
                $files[$i][‘size‘]=$file[‘size‘][$key];
                $files[$i][‘error‘]=$file[‘error‘][$key];
                $i++;
                # code...
            }
        }elseif (is_string($file[‘name‘])) {

            $files[$i]=$file;
            $i++;
            # code...
        }
         # code...
     }

     return $files;
}

function uploadFiles($files,$path=‘uploads‘,$maxsize=2097152){ 
    $result=array();
                     
      //判断$files[‘error‘]
    if ($files[‘error‘]===UPLOAD_ERR_OK) {

        //判断文件大小
        //$maxsize=2097152;
        if ($files[‘size‘]>$maxsize) {

            $result[‘msg‘]=$files[‘name‘].‘文件过大‘;
            # code...
        }

        //判断文件格式
        $ext=@strtolower(end(explode(‘.‘, $files[‘name‘])));
        $extarray=array(‘gif‘,‘jpeg‘,‘jpg‘);
        if (!in_array($ext, $extarray)) {

            $result[‘msg‘]=$files[‘name‘].‘文件格式不正确‘;
            # code...
        }

        //检查是否是真实的图片
        $check= true;
        if ($check) {
            
            if(@!getimagesize($files[‘tmp_name‘])){

                $result[‘msg‘]=$files[‘name‘].‘不是真正的图片‘;
            }
            # code...
        }

        //判断是否是通过HTTP Post上传
        if (!is_uploaded_file($files[‘tmp_name‘])) {

            $result[‘msg‘]=$files[‘name‘].‘不是通过HTTP POST上传‘;
            # code...
        }

        if($result) return $result;//返回$result;

        //移动文件
         //指定上传目录判断并创建目录
        //$path=‘uploads‘;
        if (!file_exists($path)) {

            mkdir($path,0777,true);
            chmod($path, 0777);
            # code...
        }

        //唯一的文件名
        $newname=md5(uniqid(microtime(true),true)).‘.‘.$ext;
        $destination=$path.‘/‘.$newname;

        if(!move_uploaded_file($files[‘tmp_name‘], $destination)){

            $result[‘msg‘]=$files[‘name‘].‘文件移动失败‘;

        }

        $result[‘msg‘]=$files[‘name‘].‘上传成功‘;

        $result[‘dest‘]=$destination;
        
        return $result;

    }else{
        switch($files[‘error‘]){
            case 1:
                $result[‘msg‘]=$files[‘name‘]. "文件超过了php.ini中upload_max_filesize选项限制的值。";
                 break;
               
               case 2:
                   $result[‘msg‘]=  $files[‘name‘]."文件的大小超过了HTML表单中max_file_size选项指定的值。";
                   # code...
                   break;
               case 3:
                   $result[‘msg‘]=  $files[‘name‘]."文件只有部分被上传";
                   # code...
                   break;
               case 4:
                  $result[‘msg‘]=  "没有文件被上传";
                   # code...
                   break;
               case 6:
                   $result[‘msg‘]=  "找不到临时文件夹。";
                   # code...
                   break;
               case 7:
               case 8:
                   $result[‘msg‘]=  "系统出错";
                   # code...
                   break;
        }

        return $result;
    }

    
}

?>
             

upload.php

<?php
include(‘uploads.func.php‘);

$files=getFiles();

foreach ($files as $value) {

    $result=uploadFiles($value);
    echo $result[‘msg‘]."<br/>";
    $uploads[]=@$result[‘dest‘];
}

 $uploads=array_values(array_filter($uploads));
  print_r($uploads);
//当array_filter函数的callback留空时 他会过滤掉所有键值为false的键 
//array_values() 函数返回一个包含给定数组中所有键值的数组,但不保留键名。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。