天天看點

PHP 實作多檔案上傳

multifileupload.html
<!DOCTYPE html>
<html >
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="multifileupload.php" method="POST" enctype="multipart/form-data">
    <input type="file" name="image[]">
    <input type="file" name="image[]">
    <input type="file" name="image[]">
    <input type="submit" value="上傳">
    </form>
</body>
</html>      

multifileupload.php

<?php
header('content-type:text/html;charset=utf-8');
echo '<pre>';
//var_dump($_FILES);
//讀取檔案
$image=$_FILES['image'];
//包含上傳函數
include_once 'fileUpload.php';
$type=array('image/jpeg','image/jpg','image/png','image/gif');
//循環上傳
for ($i=0,$len=count($image['name']);$i<$len;$i++){
    $file=array(
      'name'=>$image['name'][$i],
    'type'=>$image['type'][$i],
        'tmp_name'=>$image['tmp_name'][$i],
        'error'=>$image['error'][$i],
        'size'=>$image['size'][$i]
    );
    //調用檔案上傳函數
    $res=fileUpload($file,'Upload/',$error,$type);
    if ($res){
        echo '檔案上傳成功,對應的檔案名是:'.$res.'<br>';
    }
    else{
        echo $error;
    }


}      

封裝的檔案上傳函數:fileUpload.php

<?php
//檔案上傳函數封裝
/*
 * @param1 array $file,要上傳的檔案資訊,包含5個元素
 *@param2 string $path,存儲位置
 * @param3 $string error,錯誤資訊
 * @param4 array $type=array(),MIME類型限定
 * @param5 int $size=2000000,預設2M
 *  @return mixed, 成功傳回檔案名,失敗傳回false
 */
function fileUpload($file,$path,&$error,$type=array(),$size=2000000 ){
//判斷本身檔案是否有效
    if(!isset($file['error'])){
        $error='檔案無效';
        return false;
    }
    //有效路徑的判斷
    if(!is_dir($path)){
        $error='存儲路徑無效';
        return false;
    }
    //判斷檔案本身上傳是否成功
    switch ($file['error']){
        case 1:
        case 2:
            $error='檔案超過伺服器允許大小';
            return false;
        case 3:
            $error='檔案隻有部分上傳';
            return false;
        case 4:
            $error='使用者沒有選擇檔案上傳';
            return false;
        case 6:
        case 7:
        $error='伺服器操作失敗';
        return false;
    }
    //判斷類型是否符合
    if (!empty($type) && !in_array($file['type'],$type)){
        $error='目前上傳的檔案類型不符合';
        return false;
    }
    //大小判斷
    if ($file['size']>$size){
        $error='檔案大小超過目前允許範圍.目前允許大小是:'.string($size/1000000).'M';
        return false;
    }
    //轉存,移動檔案
    $newfilename=getNewName($file['name']);
if(@move_uploaded_file($file['tmp_name'],$path.''.$newfilename)){
    return $newfilename;
}
    else{
        $error='檔案上傳失敗';
        return false; 
    }

}
//随機産生一個檔案名
function getNewName($filename,$rand=6){
    $newname=date('YmdHis');//時間日期部分
    //随機部分
    $old=array_merge(range('a','z'),range('A','Z'));
    shuffle($old);
    for ($i=0;$i<$rand;$i++){
        $newname.=$old[$i];
    }
    return $newname.strstr($filename,'.');//組織有效檔案名
}

      

上傳成功:

PHP 實作多檔案上傳

上傳失敗就顯示出其原因