php文件上傳與多文件上傳其它沒有多大的區別,多文件上傳只是我們把表單名改成數組形式,而獲取利用foreach遍歷就可以實現多文件上傳了,動態多文件上傳只要在js加一個動態增加多文件上傳框,同樣在php處理時就遍歷一下數組就成了.
最簡單的實例如下,代碼如下:
- <form action="" method="post" enctype="multipart/form-data">
- <p>Pictures:
- <input type="file" name="pictures[]" />
- <input type="file" name="pictures[]" />
- <input type="file" name="pictures[]" />
- <input type="submit" value="Send" />
- </p>
- </form>
- <?php
- foreach ($_FILES["pictures"]["error"] as $key => $error) {
- if ($error == UPLOAD_ERR_OK) {
- $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
- $name = $_FILES["pictures"]["name"][$key];
- move_uploaded_file($tmp_name, "data/$name");
- }
- }
- ?>
下面分享其它朋友的例子,代碼如下:
- <?php
- //filename:multi_upload.php
- if($ifupload)
- {
- $path=AddSlashes(dirname($PATH_TRANSLATED))."/upload/";
- for($i=1;$i<=8;$i++)
- {
- $files="afile".$i;
- if(${$files}!="none")
- {
- if(copy(${$files},$path.${$files."_name"}))
- {
- }
- }
- }
- print "<b>You have uploaded files successfully</b><br>";
- print "<a href="multi_upload.php">Return</a>";
- exit;
- }
- ?>
- <html>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
- <meta NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
- <title>多個文件上傳</title>
- <style type="text/css">
- <!--
- BODY
- {
- PADDING-RIGHT: 0px;
- MARGIN-TOP: 0px;
- PADDING-LEFT: 0px;
- FONT-SIZE: 8px;
- MARGIN-LEFT: 0px;
- CURSOR: default;
- COLOR: black;
- MARGIN-RIGHT: 0px;
- PADDING-TOP: 0px;
- FONT-FAMILY: Arial;
- BACKGROUND-COLOR: transparent;
- TEXT-ALIGN: center
- }
- .TxtInput
- {
- FONT-SIZE: 8pt;
- WIDTH: 100%;
- CURSOR: default;
- COLOR: black;
- FONT-FAMILY: Arial;
- HEIGHT: 21px;
- BACKGROUND-COLOR: white;
- TEXT-ALIGN: left
- }
- .FieldLabel
- {
- FONT-WEIGHT: normal;
- FONT-SIZE: 9pt;
- WIDTH: 100%;
- COLOR: black;
- FONT-FAMILY: Arial;
- BACKGROUND-COLOR: transparent;
- TEXT-ALIGN: left
- }
- .HeadBtn
- {
- BORDER-RIGHT: black 1px solid;
- BORDER-TOP: white 1px solid;
- FONT-SIZE: 8pt;
- OVERFLOW: hidden;
- BORDER-LEFT: white 1px solid;
- WIDTH: 70px;
- COLOR: black;
- BORDER-BOTTOM: black 1px solid;
- FONT-FAMILY: Arial;
- HEIGHT: 21px;
- BACKGROUND-COLOR: #8e8dcd;
- TEXT-ALIGN: center
- }
- .TransEx
- {
- BORDER-RIGHT: black 1px solid;
- PADDING-RIGHT: 8px;
- BORDER-TOP: white 1px solid;
- PADDING-LEFT: 8px;
- FONT-SIZE: 8pt;
- PADDING-BOTTOM: 3px;
- BORDER-LEFT: white 1px solid;
- WIDTH: 720px;
- PADDING-TOP: 3px;
- BORDER-BOTTOM: black 1px solid;
- FONT-FAMILY: Arial;
- BACKGROUND-COLOR: #c0c0c0;
- TEXT-ALIGN: center
- }
- -->
- </style>
- <script language="javascript">
- function window.onload()
- {
- document.forms[0].btnOk.onclick=btn_ok;
- }
- function btn_ok()
- {
- for(var i=1;i<=8;i++)
- {
- if(eval("document.forms[0].afile"+i+".value!=''"))
- document.forms[0].submit();
- return true;
- }
- alert("None of file have been selected");
- return false;
- }
- </script>
- </head>
- <body>
- <form method="post" action="multi_upload.php" name="frmUpload" enctype="multipart/form-data" >
- <table id="divContainer" style="HEIGHT: 100%; WIDTH: 380" border="0">
- <tr height="35"><td align="right" valign="bottom">多文件上傳 </td></tr>
- <tr><td align="center" valign="top">
- <table class="Transex" border="0" cellspacing="0" cellpadding="0" style="WIDTH: 360px">
- <tr style="HEIGHT: 10px" >
- <td style="WIDTH: 5px"></td>
- <td colspan="2"></td>
- <td style="WIDTH: 5px"></td>
- </tr>
- <tr>
- <td></td>
- <td nowrap><label class="FieldLabel"> 文件1</label></td>
- <td><input type="file" class="TxtInput" tabindex="1" name="afile1" style="WIDTH: 282px"></td>
- <td></td>
- </tr>
- <tr>
- <td></td>
- <td nowrap><label class="FieldLabel"> 文件2</label></td>
- <td><input type="file" class="TxtInput" tabindex="2" name="afile2" style="WIDTH: 282px"></td>
- <td></td>
- </tr>
- <tr>
- <td></td>
- <td nowrap><label class="FieldLabel"> 文件3</label></td>
- <td><input type="file" class="TxtInput" tabindex="3" name="afile3" style="WIDTH: 282px"></td>
- <td></td>
- </tr>
- <tr>
- <td></td>
- <td nowrap><label class="FieldLabel"> 文件4</label></td>
- <td><input type="file" class="TxtInput" tabindex="4" name="afile4" style="WIDTH: 282px"></td>
- <td></td>
- </tr>
- <tr>
- <td></td>
- <td nowrap><label class="FieldLabel"> 文件5</label></td>
- <td><input type="file" class="TxtInput" tabindex="5" name="afile5" style="WIDTH: 282px"></td>
- <td></td>
- </tr>
- <tr>
- <td></td>
- <td nowrap><label class="FieldLabel"> 文件6</label></td>
- <td><input type="file" class="TxtInput" tabindex="6" name="afile6" style="WIDTH: 282px"></td>
- <td></td>
- </tr>
- <tr>
- <td></td>
- <td nowrap><label class="FieldLabel"> 文件7</label></td>
- <td><input type="file" class="TxtInput" tabindex="7" name="afile7" style="WIDTH: 282px"></td>
- <td></td>
- </tr>
- <tr>
- <td></td>
- <td nowrap><label class="FieldLabel"> 文件8</label></td>
- <td><input type="file" class="TxtInput" tabindex="8" name="afile8" style="WIDTH: 282px"></td>//開源代碼Vevb.com
- <td></td>
- </tr>
- <tr style="HEIGHT: 5px">
- <td style="WIDTH: 5px">
- <td style="WIDTH: 350px" colspan="2"><hr width="100%"></td>
- <td style="WIDTH: 5px"></td>
- </tr>
- <tr>
- <td></td>
- <td colspan="2" align="left">
- <button tabindex="5" class="headbtn" align="center" name="btnOk" id="btnOk" accesskey="O">確定(<ins>O</ins>)</button>
- <input type="hidden" name="ifupload" value=1>
- <button tabindex="5" class="headbtn" align="center" name="btnCancel" id="btnCancel" accesskey="C" onclick="window.close();">取消(<ins>C</ins>)</button></td>
- <td></td>
- </tr>
- <tr style="HEIGHT: 5px">
- <td style="WIDTH: 5px">
- <td style="WIDTH: 350px" colspan="2"></td>
- <td style="WIDTH: 5px"></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </form>
- </body>
- </html>
如果我們要動態不確定性的多文件上傳怎么實現下面也有實例,代碼如下:
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <title>文檔上傳</title>
- </head>
- <body>
- <script language="javascript"><!--
- 動態添加文件選擇控件-->
- function AddRow()
- {
- var eNewRow = tblData.insertRow();
- for (var i=0;i<1;i++)
- {
- var eNewCell = eNewRow.insertCell();
- eNewCell.innerHTML = "<tr><td><input type='file' name='filelist[]' size='50'/></td></tr>";
- }
- }
- // --></script>
- <form name="myform" method="post" action="uploadfile.php" enctype="multipart/form-data" >
- <table id="tblData" width="400" border="0">
- <!-- 將上傳文件必須用post的方法和enctype="multipart/form-data" -->
- <!-- 將本頁的網址傳給uploadfile.php-->
- <input name="postadd" type="hidden" value="<?php echo "http://".$_SERVER['HTTP_HOST'].$_SERVER["PHP_SELF"]; ?>" />
- <tr><td>文件上傳列表
- <input type="button" name="addfile" onclick="AddRow()" value="添加列表" /></td></tr>
- <!-- filelist[]必須是一個數組-->
- <tr><td><input type="file" name="filelist[]" size="50" /></td></tr>
- </table>
- <input type="submit" name="submitfile" value="提交文件" />
- </form>
- </body>
- </html>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <title>文檔上傳</title>
- </head>
- <body>
- <script language="javascript"><!--
- 動態添加文件選擇控件-->
- function AddRow()
- {
- var eNewRow = tblData.insertRow();
- for (var i=0;i<1;i++)
- {
- var eNewCell = eNewRow.insertCell();
- eNewCell.innerHTML = "<tr><td><input type='file' name='filelist[]' size='50'/></td></tr>";
- }
- }
- // --></script>
- <form name="myform" method="post" action="uploadfile.php" enctype="multipart/form-data" >
- <table id="tblData" width="400" border="0">
- <!-- 將上傳文件必須用post的方法和enctype="multipart/form-data" -->
- <!-- 將本頁的網址傳給uploadfile.php-->
- <input name="postadd" type="hidden" value="<?php echo "http://".$_SERVER['HTTP_HOST'].$_SERVER["PHP_SELF"]; ?>" />
- <tr><td>文件上傳列表
- <input type="button" name="addfile" onclick="AddRow()" value="添加列表" /></td></tr>
- <!-- filelist[]必須是一個數組-->
- <tr><td><input type="file" name="filelist[]" size="50" /></td></tr>
- </table>
- <input type="submit" name="submitfile" value="提交文件" />
- </form>
- </body>
- </html>
提交文件代碼:
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <title>文件上傳結果</title>
- </head>
- <body>
- <?php
- if ($_POST["submitfile"]!="")
- {
- $Path="./".date('Ym')."/";
- if (!is_dir($Path))//創建路徑
- { mkdir($Path); }
- echo "<div>";
- for ($i=0;$i<count($filelist);$i++)
- { //$_FILES["filelist"]["size"][$i]的排列順序不可以變,因為fileist是一個二維數組
- if ($_FILES["filelist"]["size"][$i]!=0)
- {
- $File=$Path.date('Ymdhm')."_".$_FILES["filelist"]["name"][$i];
- if (move_uploaded_file($_FILES["filelist"]["tmp_name"][$i],$File))
- { echo "文件上傳成功 文件類型:".$_FILES["filelist"]["type"][$i]." "."文件名:"
- .$_FILES["filelist"]["name"][$i]."<br>"; }
- else
- { echo "文件名:".$_FILES["filelist"]["name"][$i]."上傳失敗</br>"; }
- }
- }
- echo "</div><br><a href="$postadd" href="$postadd">返回</a></div>";
- }
- ?>
- </body>
- </html>
另:錯誤信息說明
從 PHP 4.2.0 開始,PHP 將隨文件信息數組一起返回一個對應的錯誤代碼,該代碼可以在文件上傳時生成的文件數組中的 error 字段中被找到,也就是 $_FILES['userfile']['error']。
UPLOAD_ERR_OK
其值為 0,沒有錯誤發生,文件上傳成功.
UPLOAD_ERR_INI_SIZE
其值為 1,上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值.
UPLOAD_ERR_FORM_SIZE
其值為 2,上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值.UPLOAD_ERR_PARTIAL
其值為 3,文件只有部分被上傳.
UPLOAD_ERR_NO_FILE
其值為 4,沒有文件被上傳.
UPLOAD_ERR_NO_TMP_DIR
其值為 6,找不到臨時文件夾。PHP 4.3.10 和 PHP 5.0.3 引進.
UPLOAD_ERR_CANT_WRITE
其值為 7,文件寫入失敗。PHP 5.1.0 引進.
注意:以上值在 PHP 4.3.0 之后變成了 PHP 常量.
新聞熱點
疑難解答