PHPは単一ファイルアップロード、複数の単一ファイルアップロード、マルチファイルアップロードのプロセス化パッケージを実現する


前回PHPの単一ファイルアップロード、複数の単一ファイルアップロード、マルチファイルアップロードについて言及しました
ここでは3つの方式の統一的な実現を示した.
以下に、さまざまな方法のファイルコミットページを示します.
単一ファイルアップロードupload 1.php
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>     </title>
</head>
<body>
    <form action="doAction5.php" method="post" enctype="multipart/form-data">
                  :
        <input type="file" name="myFile"/><br/>
        <input type="submit" value="    "/>
    </form>
</body>
</html>

複数の単一ファイルをアップロードupload 2.php
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>       </title>
</head>
<body>
    <form action="doAction5.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="file" name="myFile4"/><br/>
        <input type="submit" value="    "/>
    </form>
</body>
</html>

マルチファイルアップロードupload 3.php
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>     </title>
</head>
<body>
    <form action="doAction5.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="myFile[]"/><br/>
        <input type="submit" value="    "/>
    </form>
</body>
</html>
ハイブリッドファイルアップロードupload 4.php
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>        </title>
</head>
<body>
    <form action="doAction5.php" method="post" enctype="multipart/form-data">
                  :<input type="file" name="myFile1"/><br/>
                  :<input type="file" name="myFile2"/><br/>
                  :<input type="file" name="myFile[]"/><br/>
                  :<input type="file" name="myFile[]"/><br/>
                  :<input type="file" name="myFile[]" multiple="multiple"/><br/>
        <input type="submit" value="    "/>
    </form>
</body>
</html>

ファイルアップロード処理doAction 5.php
<?php
/**
 * Created by PhpStorm.
 * User: DreamBoy
 * Date: 2016/4/8
 * Time: 21:39
 */
header('content-type:text/html;charset=utf-8');
include_once 'upload.func.php';

$files = getFiles();
//print_r($files);

foreach($files as $fileInfo) {
    $res = uploadFile($fileInfo);
    echo $res['mes'],'<br/>';

    if(isset($res['dest'])) {
        $uploadFiles[] = $res['dest'];
    }
}
//          
/**
 * array_values()                     ,      。
 *   :            ,  0      1   。
 */
/**
 * array_filter()               。
 *                     。         true,
 *                    。        。
 */
//    array_filter          
if(isset($uploadFiles)) {
    $uploadFiles=array_filter($uploadFiles);

    print_r($uploadFiles);
}

ファイルのアップロードを実現する関数upload.func.php
<?php
/**
 * Created by PhpStorm.
 * User: DreamBoy
 * Date: 2016/4/8
 * Time: 21:41
 */
/**
 *         
 * @return mixed
 */
function getFiles() {
    $i = 0;
    foreach($_FILES as $file) {
        //            
        if(is_string($file['name'])) {
            $files[$i] = $file;
            $i++;
        } //     
        elseif(is_array($file['name'])) {
            foreach($file['name'] as $key=>$val) {
                $files[$i]['name'] = $file['name'][$key];
                $files[$i]['type'] = $file['type'][$key];
                $files[$i]['tmp_name'] = $file['tmp_name'][$key];
                $files[$i]['error'] = $file['error'][$key];
                $files[$i]['size'] = $file['size'][$key];
                $i++;
            }
        }
    }
    return $files;
}

/**
 *        
 */
function getExt($filename) {
    return strtolower(pathinfo($filename,PATHINFO_EXTENSION));
}

/**
 *        
 */
function getUniName() {
    return md5(uniqid(microtime(true), true));
}

/**
 *       、     、      
 * @param array $fileInfo
 * @param string $path
 * @param bool $flag
 * @param int $maxSize
 * @param array $allowExt
 * @return array
 */
function uploadFile($fileInfo, $path='./uploads',$flag=true,$maxSize=1048576,$allowExt = array('jpeg','jpg','gif','png')) {
    //$allowExt = array('jpeg','jpg','gif','png');
    //$flag = true;
    //$maxSize = 1048576; //1M

    $res = array();

    //     
    if($fileInfo['error'] == UPLOAD_ERR_OK) {
        //         
        if($fileInfo['size'] > $maxSize) {
            $res['mes'] = $fileInfo['name'] . '      ';
        }

        $ext = getExt($fileInfo['name']);
        //           
        if(!in_array($ext, $allowExt)) {
            $res['mes'] = $fileInfo['name'] . '      ';
        }

        //            
        if($flag) {
            if(!getimagesize($fileInfo['tmp_name'])) {
                $res['mes'] = $fileInfo['name'] . '        ';
            }
        }

        //         HTTP POST     
        if(!is_uploaded_file($fileInfo['tmp_name'])) {
            $res['mes'] = $fileInfo['name'] . '      HTTP POST       ';
        }

        if($res) return $res;

        //$path = './uploads';
        if(!file_exists($path)) {
            mkdir($path, 0777, true);
            chmod($path, 0777);
        }
        $uniName = getUniName();
        $destination = $path . '/' . $uniName . '.' . $ext;
        if(!move_uploaded_file($fileInfo['tmp_name'],$destination)) {
            $res['mes'] = $fileInfo['name'] . '      ';
        }

        $res['mes'] = $fileInfo['name'] . '    ';
        $res['dest'] = $destination;

        return $res;
    } else {
        //      
        switch($fileInfo['error']) {
            case 1:
                $res['mes'] = '       PHP     upload_max_filesize    ';
                break;
            case 2:
                $res['mes'] = '     MAX_FILE_SIZE     ';
                break;
            case 3:
                $res['mes'] = '       ';
                break;
            case 4:
                $res['mes'] = '        ';
                break;
            case 6:
                $res['mes'] = '        ';
                break;
            case 7:
            case 8:
                $res['mes'] = '    ';
                break;
        }
        return $res;
    }
}