標籤: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 多個檔案上傳