前言:文件上传,简单又麻烦。下面是上传文件的提交页面,利用该页面你不仅可以生成 1000 个上传文件框(实际是任意多个 0~n ),而且可分别指出它们的保存路径。 
提交页面的文件输入框为命名为: file0,file1,...file100,...fileN 
提交页面的文件路径框为命名为: path0,path1,...path100,...pathN 
由于页面的生成非常简单,所以就不在此多解释了,用 javascript 定义了两个函数,check() 用于提交页面,create()用于生成文件上传框。如果你有什么更好的建议或有什么疑问请 Email: [email protected] 
phpfileup.htm 
-------------------------------------------------------- 
<html> 
<head> 
<title></title> 
<style> 
.lbtn {font-family:verdana;font-size:10.5pt;} 
.ist {font-family:verdana;font-size:14.8px;size:400} 
</style> 
<script LANGUAGE="javascript"> 
function check(){ 
document.frm1.submit(); 
document.body.innerHTML="Uploading Please wait!"; 
} 
var i=0; 
function create(){ 
var sfrm = document.frm1.innerHTML; 
var icnt = cnt.value; 
for(j=0;j<icnt;j++) 
{ 
sfrm = sfrm + "请选择文件 "+i+" <input type=file name='file"+i+"' class=ist>"; 
sfrm = sfrm + " 路径:<input type=text name='path"+i+"' value='../www/test/tmp/' class=ist>"; 
sfrm = sfrm + "<br>"; 
i++; 
} 
document.frm1.innerHTML = sfrm; 
document.frm1.cnt.value=i; 
} 
</script> 
</head> 
<body class=lbtn onload="document.frm1.cnt.value=cnt.value;"> 
请输入要上传文件的数量: <input type=text name=cnt value="10" class=ist onchange="document.frm1.cnt.value=this.value;"> 
<input type=button name=bt1 value="生成上传文件框" onclick="create();" class=lbtn> 
<input type=button name=bt1 value="上传" onclick="check();" class=lbtn> 
<input type=button name=bt1 value="清除" onclick="document.location.reload();" class=lbtn> 
<form name=frm1 method="post" Enctype="multipart/form-data" action="../../cgi-bin/fileup.php"> 
<input type=hidden name=cnt value="20" class=ist> 
</form> 
<input type=button name=bt1 value="上传" onclick="check();" class=lbtn> 
<input type=button name=bt1 value="清除" onclick="document.location.reload();" class=lbtn> 
</body> 
</html> 
文件提交页面既已生成,下面任务就很明确了:将提交的文件内容保存到服务器上。 
下面我们用两种方法来实现这个功能:
1. 用 PHP 来保存: 
我们先定义一个文件保存函数 fup() 它有两个参数: 
$filename: 文件内容 
$fname: 文件名(包含路径) 
剩下的就是写一个循环将文件依次写入服务器。这里要简单说明一下: 
PHP 对于上传文件的处理是这样的:如果提交的文件框我为 file0, 那么提交给 PHP 的文件内容保存在变量 $file0 中,而文件名则保存在 $file0_name 中。这样在这个循环中我要做的就是将提交页面提交的内容分解出来,实现过程请看下面的代码。 
fileup.php 
---------------------------------------------------------------------- 
<? 
function fup($filename,$fname) 
{ If($filename != "none") { 
copy($filename,$fname); 
unlink($filename); 
} 
} 
for($i=0;$i<$cnt;$i++) 
{ 
$ffnn="file".$i; 
$ffnnname=$ffnn."_name"; 
$ffpath="path".$i; 
//print $$ffnn; 
print $$ffnnname; 
print "<br>"; 
fup($$ffnn,$$ffpath.$$ffnnname); //"../www/test/tmp/" 
} 
?> 
---------------------------------------------------------------------- 
2. 用 PERL 来保存: 
它们实现的原理完全一样,在此不多说,请看代码: 
fileup.cgi(fileup.pl) 
---------------------------------------------------------------------- 
#!/usr/bin/perl 
use CGI qw/:standard/;
if ($ENV{'CONTENT_TYPE'} !~ /multipart/form-data/) { 
print "Cache-Control: no-cachenPragma: no-cachen" . 
"Content-Type: text/htmlnn" . 
"<html><body>Your web browser cannot upload files. Sorry.</body></html>"; 
exit 0; 
} 
$cntfile=param('cnt'); 
print header; 
print start_html; 
#print "Receiving Please wait...."; 
&g_head;
#$writed = '../www/test/tmp/';
for ($i=0;$i<$cntfile;$i++){ 
$paramfile = 'file'.$i; 
$parampath='path'.$i; 
$writed=param($parampath); 
[1] [2] Php