上傳多個文件的PHP腳本
更新時間:2006年11月26日 00:00:00 作者:
譯者注:本文的原名是《Creating a Multi-File Upload Script in PHP》。我個個覺得這文章寫得一般,代碼也不是非常專業(yè),但是它比較短,而且一時間也找不到好一點(diǎn)的文章,就把這個譯過來了。其實(shí)PHP手冊里也有一節(jié)是說多文件上傳的,大家可以對比對比。文章內(nèi)有的字句譯出來不太順眼,所以按照原意作了一定量的修改。本人水平有限,還望各位高手多指點(diǎn)。
導(dǎo)言
作為一個PHP的程序員,我曾遇到過這么一個客戶,他需要一個可以同時上傳多個文件的表單。因此,一天夜里我就用了一個小時的時間,找到了最好最簡單的方法來完成這個要求。在這篇教程里,“for”這個循環(huán)語句,將會成為核心代碼。
腳本1:讓用戶設(shè)定需要上傳的文件數(shù)目
uploadForm1.php
<html>
<head>
<title>文件上傳</title>
</head>
<body>
<form name="form1" method="post" action="uploadForm2.php">
<p>請輸入你要同時上傳的文件的數(shù)目,最大值是9</p>
<p>
<input name="uploadNeed" type="text" id="uploadNeed" maxlength="1">
</p>
<p>
<input type="submit" name="Submit" value="Submit">
</p>
</form>
</body>
</html>
上面的HTML代碼非常簡單。在這段代碼里,我把uploadNeed這個組件的maxlength屬性設(shè)為1,那么用戶所能輸入的最大值就是9了。當(dāng)然,你可以根據(jù)需要自行修改這部份。
腳本2:創(chuàng)建動態(tài)表單
好了,做好下面的這個頁面以后,我們就完成全部工作的一半了。我們用for循環(huán)語句來完成這個任務(wù)。
uploadForm2.php
<html>
<head>
<title>文件上傳</title>
</head>
<body>
<form name="form1" enctype="multipart/form-data" method="post" action="processFiles.php">
<?php
// 創(chuàng)建動態(tài)表單
$uploadNeed = $_POST['uploadNeed'];
for($x=0;$x<$uploadNeed;$x++){
?>
<input name="uploadFile<?php echo $x;?>" type="file" id="uploadFile<?php echo $x;?>">
<?php
// 完成循環(huán)
}
?>
<input name="uploadNeed" type="hidden" value="<?php echo $uploadNeed;?>">
<input type="submit" name="Submit" value="Submit">
</form>
</body>
</html>
在這個頁面里,我只是創(chuàng)建了一個帶有“type”屬性的HTML表單。在表單中間,我插入了一段PHP代碼來完成循環(huán)。我把$x設(shè)為0并且把循環(huán)次數(shù)設(shè)為所需要的值$uploadNeed(就是剛才用戶提交的那個值)。我還把$uploadNeed的值輸出到hidden域里,以便它能傳遞到最后的一個頁面。
作這些工作的目的是為了把$x這個變量的值,加在“name”屬性的值“uploadFile”的后面。這樣每個“name”屬性的值“uploadFile”的后面都會有一個不同的數(shù)字來區(qū)別第一個文件。
腳本3:處理上傳文件
現(xiàn)在就來完成上傳文件的最后一步
processFiles.php
<?php
$uploadNeed = $_POST['uploadNeed'];
// 開始循環(huán)
for($x=0;$x<$uploadNeed;$x++){
$file_name = $_FILES['uploadFile'. $x]['name'];
// 去除文件名中的特殊字符
$file_name = stripslashes($file_name);
$file_name = str_replace("'","",$file_name);
$copy = copy($_FILES['uploadFile'. $x]['tmp_name'],$file_name);
// 檢查是否復(fù)制成功
if($copy){
echo "$file_name 上傳成功<br />";
}else{
echo "$file_name 上傳失敗<br />";
}
} // 結(jié)束循環(huán)
?>
在這個腳本里,我們首先要從uploadForm2.php中獲取$uploadNeed這個變量。和前頁那個頁面一樣,我們用“for”語句來還創(chuàng)建循環(huán)。不同的時,我們需要在循環(huán)內(nèi)使用預(yù)定義全局變量$_FILES,我把它傳遞給了$file_name這個變量。
下一步,我們調(diào)用了stripslashes和str_replace兩個函數(shù)來處理。由于文件名內(nèi)可能包含一些特殊字符,所以我們使用stripslashes函數(shù)來防止上傳時出現(xiàn)解釋錯誤。
注意我是如何添加$x這個變量的,在$_FILES里$x會變成數(shù)字。這樣程序就會知道得處理哪個文件了。
當(dāng)我們使用copy函數(shù)時,才真正的開始把上傳的文件復(fù)制到指定目前內(nèi)。最后還加上了一段簡單的代碼來判斷復(fù)制是否成功,并把結(jié)果輸出到屏幕上。
結(jié)束語
我肯定這個小小的腳本會使你一次上傳多個文件的工作變得更方便。你可以根據(jù)下列的提示,在這個腳本內(nèi)加入相關(guān)的代碼來完善它。
把文件名保存在MySQL數(shù)據(jù)庫中
獲取文件的大小并保存到數(shù)據(jù)庫中
創(chuàng)建一個臨時文件保存上傳失敗的文件的文件名,并在程序執(zhí)行完以后再試嘗試
添加批量刪除文件的功能
導(dǎo)言
作為一個PHP的程序員,我曾遇到過這么一個客戶,他需要一個可以同時上傳多個文件的表單。因此,一天夜里我就用了一個小時的時間,找到了最好最簡單的方法來完成這個要求。在這篇教程里,“for”這個循環(huán)語句,將會成為核心代碼。
腳本1:讓用戶設(shè)定需要上傳的文件數(shù)目
uploadForm1.php
<html>
<head>
<title>文件上傳</title>
</head>
<body>
<form name="form1" method="post" action="uploadForm2.php">
<p>請輸入你要同時上傳的文件的數(shù)目,最大值是9</p>
<p>
<input name="uploadNeed" type="text" id="uploadNeed" maxlength="1">
</p>
<p>
<input type="submit" name="Submit" value="Submit">
</p>
</form>
</body>
</html>
上面的HTML代碼非常簡單。在這段代碼里,我把uploadNeed這個組件的maxlength屬性設(shè)為1,那么用戶所能輸入的最大值就是9了。當(dāng)然,你可以根據(jù)需要自行修改這部份。
腳本2:創(chuàng)建動態(tài)表單
好了,做好下面的這個頁面以后,我們就完成全部工作的一半了。我們用for循環(huán)語句來完成這個任務(wù)。
uploadForm2.php
<html>
<head>
<title>文件上傳</title>
</head>
<body>
<form name="form1" enctype="multipart/form-data" method="post" action="processFiles.php">
<?php
// 創(chuàng)建動態(tài)表單
$uploadNeed = $_POST['uploadNeed'];
for($x=0;$x<$uploadNeed;$x++){
?>
<input name="uploadFile<?php echo $x;?>" type="file" id="uploadFile<?php echo $x;?>">
<?php
// 完成循環(huán)
}
?>
<input name="uploadNeed" type="hidden" value="<?php echo $uploadNeed;?>">
<input type="submit" name="Submit" value="Submit">
</form>
</body>
</html>
在這個頁面里,我只是創(chuàng)建了一個帶有“type”屬性的HTML表單。在表單中間,我插入了一段PHP代碼來完成循環(huán)。我把$x設(shè)為0并且把循環(huán)次數(shù)設(shè)為所需要的值$uploadNeed(就是剛才用戶提交的那個值)。我還把$uploadNeed的值輸出到hidden域里,以便它能傳遞到最后的一個頁面。
作這些工作的目的是為了把$x這個變量的值,加在“name”屬性的值“uploadFile”的后面。這樣每個“name”屬性的值“uploadFile”的后面都會有一個不同的數(shù)字來區(qū)別第一個文件。
腳本3:處理上傳文件
現(xiàn)在就來完成上傳文件的最后一步
processFiles.php
<?php
$uploadNeed = $_POST['uploadNeed'];
// 開始循環(huán)
for($x=0;$x<$uploadNeed;$x++){
$file_name = $_FILES['uploadFile'. $x]['name'];
// 去除文件名中的特殊字符
$file_name = stripslashes($file_name);
$file_name = str_replace("'","",$file_name);
$copy = copy($_FILES['uploadFile'. $x]['tmp_name'],$file_name);
// 檢查是否復(fù)制成功
if($copy){
echo "$file_name 上傳成功<br />";
}else{
echo "$file_name 上傳失敗<br />";
}
} // 結(jié)束循環(huán)
?>
在這個腳本里,我們首先要從uploadForm2.php中獲取$uploadNeed這個變量。和前頁那個頁面一樣,我們用“for”語句來還創(chuàng)建循環(huán)。不同的時,我們需要在循環(huán)內(nèi)使用預(yù)定義全局變量$_FILES,我把它傳遞給了$file_name這個變量。
下一步,我們調(diào)用了stripslashes和str_replace兩個函數(shù)來處理。由于文件名內(nèi)可能包含一些特殊字符,所以我們使用stripslashes函數(shù)來防止上傳時出現(xiàn)解釋錯誤。
注意我是如何添加$x這個變量的,在$_FILES里$x會變成數(shù)字。這樣程序就會知道得處理哪個文件了。
當(dāng)我們使用copy函數(shù)時,才真正的開始把上傳的文件復(fù)制到指定目前內(nèi)。最后還加上了一段簡單的代碼來判斷復(fù)制是否成功,并把結(jié)果輸出到屏幕上。
結(jié)束語
我肯定這個小小的腳本會使你一次上傳多個文件的工作變得更方便。你可以根據(jù)下列的提示,在這個腳本內(nèi)加入相關(guān)的代碼來完善它。
把文件名保存在MySQL數(shù)據(jù)庫中
獲取文件的大小并保存到數(shù)據(jù)庫中
創(chuàng)建一個臨時文件保存上傳失敗的文件的文件名,并在程序執(zhí)行完以后再試嘗試
添加批量刪除文件的功能
相關(guān)文章
ThinkPHP3.2.3所有的單字母方法整理總結(jié)
ThinkPHP3.2.3在以前是一款廣受歡迎的PHP開發(fā)框架,現(xiàn)在雖然除了版本5和6,但仍有不少項(xiàng)目使用ThinkPHP3。ThinkPHP3中的字母函數(shù)是以字母開頭的一類函數(shù),其作用是非常豐富的,包括字符串處理、文件處理、日期時間處理以及HTTP協(xié)議處理等。2023-07-07php中使用getimagesize獲取圖片、flash等文件的尺寸信息實(shí)例
這篇文章主要介紹了php中使用getimagesize獲取圖片、flash等文件的尺寸信息實(shí)例,需要的朋友可以參考下2014-04-04PHP實(shí)現(xiàn)的服務(wù)器一致性hash分布算法示例
這篇文章主要介紹了PHP實(shí)現(xiàn)的服務(wù)器一致性hash分布算法,結(jié)合實(shí)例形式分析了php一致性hash分布算法類的具體定義與相關(guān)使用技巧,需要的朋友可以參考下2018-08-08基于session_unset與session_destroy的區(qū)別詳解
本篇文章是對php中session_unset與session_destroy的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06PHP迅雷、快車、旋風(fēng)下載專用鏈轉(zhuǎn)換代碼
PHP迅雷、快車、旋風(fēng)下載專用鏈轉(zhuǎn)換實(shí)現(xiàn)代碼,需要的朋友可以參考下。2010-06-06PHP生成驗(yàn)證碼時“圖像因其本身有錯無法顯示”的解決方法
以下是對PHP生成驗(yàn)證碼時“圖像因其本身有錯無法顯示”的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下2013-08-08PHP實(shí)現(xiàn)對文本數(shù)據(jù)庫的常用操作方法實(shí)例演示
這篇文章主要介紹了PHP實(shí)現(xiàn)對文本數(shù)據(jù)庫的常用操作方法,需要的朋友可以參考下2014-07-07