本文主要跟大家分享PHP如何實現多檔案上傳,希望能幫助大家。
PHP檔案上傳流程
1. 點擊提交按鈕,瀏覽器使用者將包含上傳檔案的表單資料提交給PHP處理程序
2. Web伺服器和PHP預處理器首先判斷表單資料的大小是否超過php.ini設定檔中的post_max_size選項設定的上限值。
若超過,PHP處理程序將無法得到任何表單數據,此時不僅上傳文件失敗,而且表單控制項中填寫的數據也會提交失敗,也就是說:PHP處理程序預定義變數$_GET、$_POST、$_FILES將為空數組。
若沒有超過,檔案上傳進入第3步驟檢定。
3. 檢驗表單中的檔案大小是否超過表單隱藏域MAX_FILE_SIZE#設定的上限值。
若超過,PHP預處理器返回狀態碼2,檔案上傳失敗。
若沒有超過,檔案上傳進入第4步驟檢定。
(當有多個檔案進行上傳時,某個檔案上傳框導致的檔案上傳失敗,不會影響其他檔案上傳框的上傳結果)
4. 檢驗表單中的檔案是否超過php.ini設定檔中upload_max_filesize選項設定的上限值。
若超過,PHP預處理器返回狀態碼1,檔案上傳失敗。
若沒有超過,檔案上傳進入第5步檢定。
5. PHP實作上傳檔案需要在php.ini設定檔upload_tmp_dir選項定義的目錄中建立一個與上傳檔案一一對應的暫存檔案(預設拓展名為tmp),上傳成功後,暫存檔案立即消失,此時PHP預處理器的回傳狀態碼0。
但是有時由於默寫原因(如max_execution_time選項設定過小或網速慢等原因),上傳部分文件後不再繼續上傳剩余文件,導致文件上傳失敗,此時PHP預處理器返回狀態碼3
若通過,文件上傳進入第6步檢定。
6. 實現檔案上傳的關鍵步驟在於在暫存檔案消失前,需要將暫存檔案儲存到網路伺服器或檔案伺服器。 PHP提供的兩個函數:is_uploaded_file()函數和move_uploaded_file()函數,可以幫助完成這一步的工作
多個檔案上傳要注意的就是相同的name所儲存的檔案內容是按照下面的形式放在陣列中的。是五個數組,依照檔案的五個參數分別存放的,並非三個數組。所以如果直接使用count($_FILES[‘$myPicture’]),答案是5。
array (size=5) 'name' => array (size=3) 0 => string '1.txt' (length=5) 1 => string '2.txt' (length=5) 2 => string '3.txt' (length=5) 'type' => array (size=3) 0 => string 'text/plain' (length=10) 1 => string 'text/plain' (length=10) 2 => string 'text/plain' (length=10) 'tmp_name' => array (size=3) 0 => string 'D:\wamp64\tmp\phpC5E8.tmp' (length=25) 1 => string 'D:\wamp64\tmp\phpC5E9.tmp' (length=25) 2 => string 'D:\wamp64\tmp\phpC5EA.tmp' (length=25) 'error' => array (size=3) 0 => int 0 1 => int 0 2 => int 0 'size' => array (size=3) 0 => int 0 1 => int 0 2 => int 0
index.php檔案
<form action="fileSystem.php" method="post" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="100000" /> <input type="file" name="myPicture[]" size= "25" maxlength="100"><br> <input type="file" name="myPicture[]" size= "25" maxlength="100"><br> <input type="file" name="myPicture[]" size= "25" maxlength="100"><br> <input type="submit" value="提交"> </form>
fileSystem檔案
<?php if (empty($_POST)) { exit("提交的表单数据超过post_max_size的配置"); } $arr = $_FILES['myPicture']; $file =array(); for ($i=0; $i < count($arr['name']); $i++) { $file[$i]['name'] = $arr['name'][$i]; $file[$i]['type'] = $arr['type'][$i]; $file[$i]['tmp_name'] = $arr['tmp_name'][$i]; $file[$i]['error'] = $arr['error'][$i]; $file[$i]['size'] = $arr['size'][$i]; } for ($i=0; $i < count($file); $i++) { switch ($file[$i]['error']) { case 0: $fileName = $file[$i]['name']; $fileTemp = $file[$i]['tmp_name']; $destination = "uploads/" . $file[$i]['name']; move_uploaded_file($fileTemp, $destination); echo "上传成功"; break; case 1: echo "上传附件超过php.ini中的upload_max_filesize选项的限制"; break; case 2: echo "上传附件的大小超过了form表单MAX_FILE_SIZE选项指定的值"; break; case 3: echo "附件只有部分被上传"; break; case 4: echo "没有选择上传附件"; break; } } ?>
PHP檔案上傳流程##1.1.提交按鈕,瀏覽器使用者將包含上傳檔案的表單資料提交給PHP處理程序
2. Web伺服器和PHP預處理器首先判斷表單資料的大小是否超過php.ini設定檔中的
post_max_size選項設定的上限值。
若超過,PHP處理程序將無法得到任何表單數據,此時不僅上傳文件失敗,而且表單控制項中填寫的數據也會提交失敗,也就是說:PHP處理程序預定義變數$_GET、$_POST、$_FILES將為空數組。
若沒有超過,檔案上傳進入第3步驟檢定。
3. 檢驗表單中的檔案大小是否超過表單隱藏域
MAX_FILE_SIZE#設定的上限值。
若超過,PHP預處理器返回狀態碼2,檔案上傳失敗。
若沒有超過,檔案上傳進入第4步驟檢定。
(當有多個檔案進行上傳時,某個檔案上傳框導致的檔案上傳失敗,不會影響其他檔案上傳框的上傳結果)
4. 檢驗表單中的檔案是否超過php.ini設定檔中
upload_max_filesize選項設定的上限值。
若超過,PHP預處理器返回狀態碼1,檔案上傳失敗。
若沒有超過,檔案上傳進入第5步檢定。
5. PHP實作上傳檔案需要在php.ini設定檔upload_tmp_dir選項定義的目錄中建立一個與上傳檔案一一對應的暫存檔案(預設拓展名為tmp),上傳成功後,暫存檔案立即消失,此時PHP預處理器的回傳狀態碼0。
但是有時由於默寫原因(如max_execution_time選項設定過小或網速慢等原因),上傳部分文件後不再繼續上傳剩余文件,導致文件上傳失敗,此時PHP預處理器返回狀態碼3
若通過,文件上傳進入第6步檢定。
6. 實作檔案上傳的關鍵步驟在於在暫存檔案消失前,需要將暫存檔案儲存到Web伺服器或檔案伺服器。 PHP提供的兩個函數:
is_uploaded_file()函數和move_uploaded_file()函數,可以幫助完成這一步的工作
多個檔案上傳要注意的就是相同的name所儲存的檔案內容是按照下面的形式放在陣列中的。是五個數組,依照檔案的五個參數分別存放的,並非三個數組。所以如果直接使用count($_FILES[‘$myPicture’]),答案是5。
array (size=5) 'name' => array (size=3) 0 => string '1.txt' (length=5) 1 => string '2.txt' (length=5) 2 => string '3.txt' (length=5) 'type' => array (size=3) 0 => string 'text/plain' (length=10) 1 => string 'text/plain' (length=10) 2 => string 'text/plain' (length=10) 'tmp_name' => array (size=3) 0 => string 'D:\wamp64\tmp\phpC5E8.tmp' (length=25) 1 => string 'D:\wamp64\tmp\phpC5E9.tmp' (length=25) 2 => string 'D:\wamp64\tmp\phpC5EA.tmp' (length=25) 'error' => array (size=3) 0 => int 0 1 => int 0 2 => int 0 'size' => array (size=3) 0 => int 0 1 => int 0 2 => int 0
index.php檔案
<form action="fileSystem.php" method="post" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="100000" /> <input type="file" name="myPicture[]" size= "25" maxlength="100"><br> <input type="file" name="myPicture[]" size= "25" maxlength="100"><br> <input type="file" name="myPicture[]" size= "25" maxlength="100"><br> <input type="submit" value="提交"> </form>
fileSystem檔案
<?php if (empty($_POST)) { exit("提交的表单数据超过post_max_size的配置"); } $arr = $_FILES['myPicture']; $file =array(); for ($i=0; $i < count($arr['name']); $i++) { $file[$i]['name'] = $arr['name'][$i]; $file[$i]['type'] = $arr['type'][$i]; $file[$i]['tmp_name'] = $arr['tmp_name'][$i]; $file[$i]['error'] = $arr['error'][$i]; $file[$i]['size'] = $arr['size'][$i]; } for ($i=0; $i < count($file); $i++) { switch ($file[$i]['error']) { case 0: $fileName = $file[$i]['name']; $fileTemp = $file[$i]['tmp_name']; $destination = "uploads/" . $file[$i]['name']; move_uploaded_file($fileTemp, $destination); echo "上传成功"; break; case 1: echo "上传附件超过php.ini中的upload_max_filesize选项的限制"; break; case 2: echo "上传附件的大小超过了form表单MAX_FILE_SIZE选项指定的值"; break; case 3: echo "附件只有部分被上传"; break; case 4: echo "没有选择上传附件"; break; } } ?>
相關推薦:
#以上是PHP如何實作多檔案上傳的詳細內容。更多資訊請關注PHP中文網其他相關文章!