下面咱們就經過具體的代碼示例,爲你們介紹PHP實現多文件上傳的一些簡單方法。php
第一種方法:利用單個文件上傳方法html
一段簡單的form表單代碼以下:數組
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="upload.php" method="post" enctype="multipart/form-data"> 選擇文件進行上傳: <input type="file" name="file1"> 選擇文件進行上傳: <input type="file" name="file2"> 選擇文件進行上傳: <input type="file" name="file3"> <input type="submit" value="上傳"> </form> </body> </html>
代碼效果以下圖:瀏覽器
如圖咱們選擇上傳了三個文件,而後咱們再將文件上傳給upload.php文件中,PHP代碼以下:post
<?php echo "<pre>"; var_dump($_FILES);
那麼咱們繼續經過瀏覽器訪問結果以下:spa
這裏咱們獲得了圖中的二維數組,若是咱們想要進行多文件上傳就須要經過foreach循環來實現。code
那麼upload.php完整代碼以下:orm
<?php echo "<pre>"; var_dump($_FILES); $files = []; foreach ($_FILES as $fileInfo) { $files[] = upload_file($fileInfo); } var_dump($files); function upload_file($fileInfo, $upload = "./upload", $imagesExt = ['gif', 'png', 'jpg']) { if ($fileInfo['error'] === 0) { $ext = strtolower(pathinfo($fileInfo['name'], PATHINFO_EXTENSION)); if (!in_array($ext, $imagesExt)) { return "文件非法類型"; } if (!is_dir($upload)) { mkdir($upload, 0777, true); } $fileName = md5(uniqid(microtime(true), true)) . "." . $ext; $destName = $upload . "/" . $fileName; if (!move_uploaded_file($fileInfo['tmp_name'], $destName)) { return "文件上傳失敗!"; } return "文件上傳成功!"; } else { switch ($fileInfo['error']) { case 1: echo '上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值'; break; case 2: echo '上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值'; break; case 3: echo '文件只有部分被上傳'; break; case 4: echo '沒有文件被上傳'; break; case 6: echo '找不到臨時文件夾'; break; case 7: echo '文件寫入失敗'; break; } } }
最後咱們選擇多個文件上傳,結果就以下圖所示:htm
此時已經成功實現多個文件上傳的操做了。
blog
第二種方法:利用HTML5中的multiple方法
上傳多文件的HTML界面的代碼示例以下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data"> 選擇文件進行上傳: <input type="file" name="file[]" multiple=""><br>
<input type="submit" value="上傳">
</form>
</body>
</html>
此段代碼效果以下圖:
在這裏的form表單中咱們用到了HTML 5中的 multiple 屬性,這個屬性表示輸入字段可選擇多個值,也就是選擇該屬性時,此字段能夠接受多個值。multiple是咱們實現多文件上傳的一個重要屬性。同時咱們將input中name名設置爲一個file[] 數組。
那麼咱們再選擇多個文件上傳,以下圖:
如圖咱們選擇了三張圖片,而後再用以下upload.php文件來接收三個數據。
upload.php代碼示例以下:
<?php echo "<pre>"; var_dump($_FILES); $files = []; foreach ($_FILES as $fileInfo) { $files[] = upload_file($fileInfo); } var_dump($files); function upload_file($fileInfo, $upload = "./upload", $imagesExt = ['gif', 'png', 'jpg']) { if ($fileInfo['error'] === 0) { $ext = strtolower(pathinfo($fileInfo['name'], PATHINFO_EXTENSION)); if (!in_array($ext, $imagesExt)) { return "文件非法類型"; } if (!is_dir($upload)) { mkdir($upload, 0777, true); } $fileName = md5(uniqid(microtime(true), true)) . "." . $ext; $destName = $upload . "/" . $fileName; if (!move_uploaded_file($fileInfo['tmp_name'], $destName)) { return "文件上傳失敗!"; } return "文件上傳成功!"; } else { switch ($fileInfo['error']) { case 1: echo '上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值'; break; case 2: echo '上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值'; break; case 3: echo '文件只有部分被上傳'; break; case 4: echo '沒有文件被上傳'; break; case 6: echo '找不到臨時文件夾'; break; case 7: echo '文件寫入失敗'; break; } } }
咱們從圖中能夠看到,上傳文件信息以三維數組形式展示,其中三個圖片的名稱、類型、臨時存儲的位置路徑、大小等等信息都分別放在了一個數組中。
然而咱們能夠發現upload.php這個文件中的信息解析方法對於用multiple屬性上傳來的文件並無產生效果。
那麼本篇文章就先給你們介紹PHP使用multiple屬性實現多文件上傳的這兩種簡單方法,