PHP 多個檔案上傳

來源:互聯網
上載者:User

標籤:des   style   blog   http   io   color   ar   os   使用   

關鍵函數:

is_uploaded_file():用於判斷指定的檔案是否是通過 HTTP POST 上傳的,如果是則返回 TRUE。用於防止潛在的攻擊者對原本不能通過指令碼互動的檔案進行非法管理,這可以用來確保惡意的使用者無法欺騙指令碼去訪問本不能訪問的檔案。

move_uploaded_file():檔案上傳後,首先會儲存在伺服器的臨時目錄中,可以是該函數將上傳的檔案移動到新位置。與 copy() 和 move() 相比,該函數還有一種額外的功能,檢查並確保由第一個參數 filename 指定的檔案,是否是合法的上傳檔案( 即通過 PHP 的 HTTP POST 上傳機制所上傳的 )。如果檔案合法,則將其移動為由第二個參數 destination 指定的檔案。如果 filename 不是合法的上傳檔案,不會出現任何操作,將返回 FALSE。如果 filename 是合法的上傳檔案,但出於某些原因無法移動,不會出現任何操作,也將返回FALSE。此外還將發出一條警告。若成功則返回TRUE。

array_pop():彈出並返回數組中的最後一個元素,並將 array 的長度減1。案例中用於取出檔案尾碼。

list():用數組中的元素為一組變數賦值。

 

多個檔案上傳只需要在單個檔案上傳的基礎上,在原來的二維數組 $_FILES 之外進行一次迴圈。

 

HTML:

<!DOCTYPE html><html><head><meta charset="utf-8"><title>檔案上傳</title></head><body>    <form action="upload.php" method="post" enctype="multipart/form-data">                <input type="hidden" name="MAX_FILE_SIZE" value="1000000">        選擇檔案1:<input type="file" name="myfile[]"><br>        選擇檔案2:<input type="file" name="myfile[]"><br>        選擇檔案3:<input type="file" name="myfile[]"><br>        <input type="submit" value="上傳檔案">    </form></body></html> 

 圖1

圖2

uoload.php:

<?php$allowtype = array("gif","png","jpg"); //允許上傳的檔案格式$size = 1000000; //設定允許大小1M以內的檔案$path = "./uploads"; //設定上傳後儲存檔案的路徑//判斷檔案是否可以上傳到伺服器 $_FILES[‘myfile‘][error]為0表示成功//迴圈for( $i = 0;$i < count($_FILES[‘myfile‘][‘error‘]);$i++ ){    $upfile[$i] = $_FILES[‘myfile‘][‘name‘][$i];    if($_FILES[‘myfile‘][‘error‘][$i]>0){        echo "上傳錯誤";        switch($_FILES[‘myfile‘][‘error‘][$i]){                    case 1: die(‘第‘.($i+1).‘個檔案上傳檔案大小超出了PHP設定檔中的約定值:upload_max_filesize‘);            case 2: die(‘上傳第‘.($i+1).‘個檔案大小超出了表單中的約定值:MAX_FILE_SIZE‘);            case 3: die(‘第‘.($i+1).‘個檔案只被部分上傳‘);            case 4: die(‘第‘.($i+1).‘個檔案沒有上傳‘);            default: die(‘未知錯誤‘);        }    }    //判斷上傳的檔案是否為允許的檔案類型,通過檔案的尾碼名    //array_pop 彈出並返回數組中的最後一個元素,並將array的長度減1    $hz[$i] = array_pop(explode(".",$_FILES[‘myfile‘][‘name‘][$i]));    if(!in_array($hz[$i],$allowtype)){        die("第".($i+1)."個檔案尾碼是<b>{$hz}</b>,不是允許的檔案類型!");    }    /*也可通過擷取上傳檔案的MIME類型中的主類型和子類型,來限制檔案上傳的類型    list($maintype,$subtype) = explode("/",$_FILES[‘myfile‘][‘type‘]);    if($maintype == "text"){        die("不能上傳文字檔");    }    */    //判斷上傳的檔案是否允許大小    if($_FILES[‘myfile‘][‘size‘][$i]>$size){        die("第".($i+1)."個檔案超過了允許的<b>{$size}</b>");    }    //為了系統安全,同時也為了同名檔案不被覆蓋,上傳後將檔案名稱使用系統定義    $filename[$i] = date("YmdHis").rand(100,999).".".$hz[$i];    //判斷是否為上傳檔案    if(is_uploaded_file($_FILES[‘myfile‘][‘tmp_name‘][$i])){        if(!move_uploaded_file($_FILES[‘myfile‘][‘tmp_name‘][$i],$path.‘/‘.$filename[$i])){                    die("不能將檔案移動到指定目錄");        }    }else{        die("上傳檔案{$_FILES[‘myfile‘][‘name‘][$i]}不是一個合法檔案");    }    //如果檔案上傳成功    $filesize[$i] = $_FILES[‘myfile‘][‘size‘][$i]/1024;    echo "檔案{$upfile[$i]}上傳成功,儲存在目錄{$path}中,檔案大小為{$filesize[$i]}KB<br>";}

頁面顯示:

檔案87d11a09d24848fa3ac763fe.jpg上傳成功,儲存在目錄./uploads中,檔案大小為34.60546875KB
檔案0ef5e0fef0adab0f5c6008a2.jpg上傳成功,儲存在目錄./uploads中,檔案大小為37.810546875KB
檔案2dbda88c96801dd6f11f3617.jpg上傳成功,儲存在目錄./uploads中,檔案大小為168.0478515625KB

PHP 多個檔案上傳

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.