文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>让你同时上传 1000 个文件

让你同时上传 1000 个文件

时间:2007-02-17  来源:PHP爱好者

预备知识: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> <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); &upfile;
&g_body;
} &g_bott; #<<<<<<<<<<<<<<<<<<<<<以下为自定义过程<<<<<<<<<<<<<<<<<<<<<<<<< sub upfile
{
$maxdata = 512000;
# $writed = '../www/test/tmp/';
$strRFname=reverse $xfile;
$intIndex=index($strRFname,'');
$strNetFname=substr($strRFname,0,$intIndex);
$strNetFname=scalar reverse $strNetFname;

if((stat $xfile)[7]>$maxdata){
print "Status: 411 Size Not Allowedn" .
"Content-Type: text/HTMLnAllow: POSTnn" .
"<HTML><head><title>411 411 Size Not Allowed</title></head><body><h1> You got big problem. Try again.</h1></body></HTML>n";
exit 0;
}

binmode $xfile;
use File::Copy;
copy($xfile,$writed.$strNetFname);
} sub g_head{
print '<table border=1 align=center>';
print '<tr><td colspan=3 align=center>文件上传结果(Upload Result)</td></tr>';
print '<tr align=center>';
print ' <td>SourceFile:</td>';
print ' <td>DestFile:</td>';
print ' <td>Upload</td>';
print '</tr>';
} sub g_body{
print '<tr>';
print ' <td>'.$xfile .'</td>';
print ' <td>'.$writed.$strNetFname.'</td>';
print ' <td>OK!</td>';
print '</tr>';
} sub g_bott{
print '</table>';
}
----------------------------------------------------------------------
如有好的建议请 Email: [email protected]
php爱好者站 http://www.phpfans.net PHP|MySQL|javascript|ajax|html.
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载