博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

Lisa

我不是精神至上者,也不是物质崇拜者,只是想简单的快乐……
liwh.cublog.cn
上传多个文件的PHP脚本
 
上传多个文件的PHP脚本

文章作者:不详
责任编辑:大鱼 录入时间:2004-11-18 14:21:20 来源:www.lmws.net
频道声明:本频道的文章除部分特别声明禁止转载的专稿外,可以自由转载.但请务必注明出出处和原始作者 文章版权归本频道与文章作者所有.对于被频道转载文章的个人和网站,我们表示深深的谢意. 

译者注:本文的原名是《Creating a Multi-File Upload Script in PHP》。我个个觉得这文章写得一般,代码也不是非常专业,但是它比较短,而且一时间也找不到好一点的文章,就把这个译过来了。其实PHP手册里也有一节是说多文件上传的,大家可以对比对比。文章内有的字句译出来不太顺眼,所以按照原意作了一定量的修改。本人水平有限,还望各位高手多指点。

导言

    作为一个PHP的程序员,我曾遇到过这么一个客户,他需要一个可以同时上传多个文件的表单。因此,一天夜里我就用了一个小时的时间,找到了最好最简单的方法来完成这个要求。在这篇教程里,“for”这个循环语句,将会成为核心代码。

脚本1:让用户设定需要上传的文件数目

uploadForm1.php

<html>
<head>
<title>文件上传</title>
</head>
<body>
<form name="form1" method="post" action="uploadForm2.php">
  <p>请输入你要同时上传的文件的数目,最大值是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属性设为1,那么用户所能输入的最大值就是9了。当然,你可以根据需要自行修改这部份。

脚本2:创建动态表单

    好了,做好下面的这个页面以后,我们就完成全部工作的一半了。我们用for循环语句来完成这个任务。

uploadForm2.php

<html>
<head>
<title>文件上传</title>
</head>
<body>
<form name="form1" enctype="multipart/form-data" method="post" action="processFiles.php">
  
<?php
  
// 创建动态表单
  
$uploadNeed = $_POST['uploadNeed'
];
  for(
$x=0;$x<$uploadNeed;$x
++){
  
?>
    <input name="uploadFile<?php echo $x;?>" type="file" id="uploadFile<?php echo $x;?>">
  
<?php
  
// 完成循环
  
}
  
?>
  <input name="uploadNeed" type="hidden" value="<?php echo $uploadNeed;?>">
    <input type="submit" name="Submit" value="Submit">
</form>
</body>
</html>



    在这个页面里,我只是创建了一个带有“type”属性的HTML表单。在表单中间,我插入了一段PHP代码来完成循环。我把$x设为0并且把循环次数设为所需要的值$uploadNeed(就是刚才用户提交的那个值)。我还把$uploadNeed的值输出到hidden域里,以便它能传递到最后的一个页面。

    作这些工作的目的是为了把$x这个变量的值,加在“name”属性的值“uploadFile”的后面。这样每个“name”属性的值“uploadFile”的后面都会有一个不同的数字来区别第一个文件。

现在就来完成上传文件的最后一步 processFiles.php


<?php
$uploadNeed
= $_POST['uploadNeed'
];
// 开始循环
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
);
// 检查是否复制成功
if($copy
){
echo
"$file_name 上传成功<br />"
;
}else{
echo
"$file_name 上传失败<br />"
;
}
}
// 结束循环
?>


     在这个脚本里,我们首先要从uploadForm2.php中获取$uploadNeed这个变量。和前页那个页面一样,我们用“for”语句来还创建循环。不同的时,我们需要在循环内使用预定义全局变量$_FILES,我把它传递给了$file_name这个变量。

    下一步,我们调用了stripslashes和str_replace两个函数来处理。由于文件名内可能包含一些特殊字符,所以我们使用stripslashes函数来防止上传时出现解释错误。

    注意我是如何添加$x这个变量的,在$_FILES里$x会变成数字。这样程序就会知道得处理哪个文件了。

    当我们使用copy函数时,才真正的开始把上传的文件复制到指定目前内。最后还加上了一段简单的代码来判断复制是否成功,并把结果输出到屏幕上。

结束语

    我肯定这个小小的脚本会使你一次上传多个文件的工作变得更方便。你可以根据下列的提示,在这个脚本内加入相关的代码来完善它。

  • 把文件名保存在MySQL数据库中
  • 获取文件的大小并保存到数据库中
  • 创建一个临时文件保存上传失败的文件的文件名,并在程序执行完以后再试尝试
  • 添加批量删除文件的功能

发表于: 2007-01-30,修改于: 2007-01-30 00:11,已浏览640次,有评论2条 推荐 投诉
网友: 本站网友 时间:2007-08-31 16:26:31 IP地址:222.64.7.★
15G空间=5个网站=500元/年 
http://www.abcnic.com/
可免费试用!赶快行动吧!
    有广告位的也M我啊!


  ☆15G全能空间年付500元/月付70元 可免费试用☆月流量500G!!!

【15G空间=5个网站=500元/年】 

全国第一家虚拟主机:支持伪静态.有利于提高排名!!!

详情咨询021-51695858   QQ:678500    MSN&E-Mail:jiadeniu@sina.com
官方网站  www.abcnic.com
ADD:上海市浦东新区金桥浙桥路289号建银大厦A座703-704

迅驰型虚拟主机(Windows系统) 
原价:1500元/年 
现价:¥500.00元/1年 
主机空间和流量(15GB 超大空间 + 500GB/月流量) 
5GB 独立WEB空间、5GB 企业邮箱空间、5GB MSSQL数据库 
IIS连接数据 500 个、500GB/月流量限制、共享日志文件空间 

 企业邮箱功能 
赠送5GB 超大企业邮箱,500个Email企业邮箱用户 
自动回复、自动转发、POP3、SMTP收发信、SMTP发信认证 
邮件过滤、邮件拒收、邮件夹管理、邮件域管理、定制邮件数 

 主机功能支持 
采用安全稳定的Win2003 .net2.0 架构 
支持ASP、PHP、ASP.NET、PERL等脚本、支持自定义CGI 
全面支持.net2.0版本,独立的Application应用池,支持SSI(Shtml),支持FrontPage扩展 
可免费自行绑定5个域名、500个解析、500个子域名 

 数据库功能 
支持5GB MSSQL数据库空间,5个用户数据库、Access 
网站空间功能概要
主机多域名绑定  MySQL 数据库   FTP/WEB文件管理  
独立DNS管理面板   网站流量统计   JSP/ASP/.Net/PHP 
POP/IMAP邮件  PLESK控制面板  虚拟主机管理界面  

   欢迎各界人士莅临指导,业务洽谈!               顺祝商祺!

网友: 本站网友 时间:2007-11-28 10:28:47 IP地址:222.131.41.★
不错,学习了!


给我留言
版权所有 ChinaUnix.net 页面生成时间:0.16052