上传多个文件的PHP脚本

 更新时间:2006年11月26日 00:00:00   作者:  
译者注:本文的原名是《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”的后面都会有一个不同的数字来区别第一个文件。

脚本3:处理上传文件

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

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

相关文章

  • php简单实现无限分类树形列表的方法

    php简单实现无限分类树形列表的方法

    这篇文章主要介绍了php简单实现无限分类树形列表的方法,实例分析了php通过数组实现树形列表的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • PHP实现提取多维数组指定一列的方法总结

    PHP实现提取多维数组指定一列的方法总结

    这篇文章主要介绍了PHP实现提取多维数组指定一列的方法,结合实例形式总结分析了PHP针对多维数组的遍历、转换、提取等相关操作技巧,需要的朋友可以参考下
    2019-12-12
  • php实现处理输入转义字符的代码

    php实现处理输入转义字符的代码

    这篇文章主要介绍了php实现处理输入转义字符的代码,需要的朋友可以参考下
    2015-11-11
  • PHP syntax error, unexpected $end 错误的一种原因及解决

    PHP syntax error, unexpected $end 错误的一种原因及解决

    PHP 遇到 syntax error, unexpected $end 错误时,查错思路其实还是看看文件里 PHP 的开始标记和结束标记是否配对,还要额外注意注释里是否出现过 ?> 哟。
    2008-10-10
  • php使用filter_var函数判断邮箱,url,ip格式示例

    php使用filter_var函数判断邮箱,url,ip格式示例

    这篇文章主要介绍了php使用filter_var函数判断邮箱,url,ip格式,简单分析了php filter_var函数的功能、参数,并结合实例形式给出了filter_var函数判断邮箱,url,ip格式的相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • PHP程序员最常犯的11个MySQL错误小结

    PHP程序员最常犯的11个MySQL错误小结

    对于大多数web应用来说,数据库都是一个十分基础性的部分。如果你在使用PHP,那么你很可能也在使用MySQL—LAMP系列中举足轻重的一份子。
    2010-11-11
  • mysql 中InnoDB和MyISAM的区别分析小结

    mysql 中InnoDB和MyISAM的区别分析小结

    InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。
    2008-04-04
  • php中大括号作用介绍

    php中大括号作用介绍

    {}大括号在php中的作用(PHP变量放在大括号里面的含义)
    2012-03-03
  • php 不使用js实现页面跳转

    php 不使用js实现页面跳转

    页面跳转大多情况下是使用js,其实也可以不用,下面为大家介绍下具体的实现,需要的朋友可以参考下
    2014-02-02
  • escape unescape的php下的实现方法

    escape unescape的php下的实现方法

    escape unescape的php下的实现方法...
    2007-04-04

最新评论