当前位置: 首页 > 图文教程 > 网络编程 > PHP > 让你同时上传 1000 个文件

PHP
PHP新手总结的PHP基础知识
php实现gb2312和unicode间编码转换
用php语言实现数据库连接详细代码介绍
详细解析 PHP 向 MySQL 发送数据过程
利用PHP V5开发多任务应用程序
详细讲解PHP中缓存技术的应用
php escapeshellcmd多字节编码漏洞
《PHP设计模式介绍》导言
《PHP设计模式介绍》第一章 编程惯用法
《PHP设计模式介绍》第二章 值对象模式
《PHP设计模式介绍》第三章 工厂模式
《PHP设计模式介绍》第四章 单件模式
《PHP设计模式介绍》第五章 注册模式
《PHP设计模式介绍》第六章 伪对象模式
《PHP设计模式介绍》第七章 策略模式
《PHP设计模式介绍》第八章 迭代器模式
《PHP设计模式介绍》第九章 观测模式
《PHP设计模式介绍》第十章 规范模式
《PHP设计模式介绍》第十一章 代理模式
《PHP设计模式介绍》第十二章 装饰器模式

PHP 中的 让你同时上传 1000 个文件


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-23   浏览: 103 ::
收藏到网摘: n/a

预备知识:Javascript,PHP(少量)/Perl(少量)!
测试环境:Windows2000+IIS5+PHP(Win98+PWS+PHP3失败,估计是配置出了问题)
目录结构:
/wwwroot/cgi-bin/fileup.php(文件接收)
/wwwroot/www/test/phpfileup.htm(文件提交)
/wwwroot/www/test/tmp/(默认保存目录)

前言:文件上传,简单又麻烦。下面是上传文件的提交页面,利用该页面你不仅可以生成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>

<scriptLANGUAGE="javascript">
functioncheck(){
document.frm1.submit();
document.body.innerHTML="UploadingPleasewait!";
}

vari=0;
functioncreate(){
varsfrm=document.frm1.innerHTML;
varicnt=cnt.value;
for(j=0;j<icnt;j++)
{
sfrm=sfrm+"请选择文件"+i+"<inputtype=filename='file"+i+"'class=ist>";
sfrm=sfrm+"路径:<inputtype=textname='path"+i+"'value='../www/test/tmp/'class=ist>";
sfrm=sfrm+"<br>";
i++;
}
document.frm1.innerHTML=sfrm;
document.frm1.cnt.value=i;
}

</script>

</head>
<bodyclass=lbtn>
请输入要上传文件的数量:<inputtype=textname=cntvalue="10"class=ist>
<inputtype=buttonname=bt1value="生成上传文件框"class=lbtn>
<inputtype=buttonname=bt1value="上传"class=lbtn>
<inputtype=buttonname=bt1value="清除"class=lbtn>

<formname=frm1method="post"Enctype="multipart/form-data"action="../../cgi-bin/fileup.php">
<inputtype=hiddenname=cntvalue="20"class=ist>
</form>

<inputtype=buttonname=bt1value="上传"class=lbtn>
<inputtype=buttonname=bt1value="清除"class=lbtn>
</body>
</html>
文件提交页面既已生成,下面任务就很明确了:将提交的文件内容保存到服务器上。

下面我们用两种方法来实现这个功能:

1.用PHP来保存:
我们先定义一个文件保存函数fup()它有两个参数:
$filename:文件内容
$fname:文件名(包含路径)
剩下的就是写一个循环将文件依次写入服务器。这里要简单说明一下:
PHP对于上传文件的处理是这样的:如果提交的文件框我为file0,那么提交给PHP的文件内容保存在变量$file0中,而文件名则保存在$file0_name中。这样在这个循环中我要做的就是将提交页面提交的内容分解出来,实现过程请看下面的代码。

fileup.php
----------------------------------------------------------------------
<?
functionfup($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

useCGIqw/:standard/;

if($ENV{'CONTENT_TYPE'}!~/multipart/form-data/){
print"Cache-Control:no-cachenPragma:no-cachen".
"Content-Type:text/htmlnn".
"<html><body>Yourwebbrowsercannotuploadfiles.Sorry.</body></html>";
exit0;
}


$cntfile=param('cnt');
printheader;
printstart_html;
#print"ReceivingPleasewait....";

&g_head;

#$writed='../www/test/tmp/';

for($i=0;$i<$cntfile;$i++){
$paramfile='file'.$i;
$parampath='path'.$i;

$writed=param($parampath);

&upfile;
&g_body;
}

&g_bott;

#<<<<<<<<<<<<<<<<<<<<<以下为自定义过程<<<<<<<<<<<<<<<<<<<<<<<<<

subupfile
{
$maxdata=512000;
#$writed='../www/test/tmp/';


$strRFname=reverse$xfile;
$intIndex=index($strRFname,'\');
$strNetFname=substr($strRFname,0,$intIndex);
$strNetFname=scalarreverse$strNetFname;


if((stat$xfile)[7]>$maxdata){
print"Status:411SizeNotAllowedn".
"Content-Type:text/htmlnAllow:POSTnn".
"<html><head><title>411411SizeNotAllowed</title></head><body><h1>Yougotbigproblem.Tryagain.</h1></body></html>n";
exit0;
}


binmode$xfile;
useFile::Copy;
copy($xfile,$writed.$strNetFname);
}

subg_head{
print'<tableborder=1align=center>';
print'<tr><tdcolspan=3align=center>文件上传结果(UploadResult)</td></tr>';
print'<tralign=center>';
print'<td>SourceFile:</td>';
print'<td>DestFile:</td>';
print'<td>Upload</td>';
print'</tr>';
}

subg_body{
print'<tr>';
print'<td>'.$xfile.'</td>';
print'<td>'.$writed.$strNetFname.'</td>';
print'<td>OK!</td>';
print'</tr>';
}

subg_bott{
print'</table>';
}
----------------------------------------------------------------------