上传多个文件的PHP脚本
类别: PHP教程
译者注:本文的原名是《Creating a Multi-File Upload Script in PHP》。我个个觉得这文章写得一般,代码也不是非常专业,但是它比较短,而且一时间也找不到好一点的文章,就把这个译过来了。其实PHP手册里也有一节是说多文件上传的,大家可以对比对比。文章内有的字句译出来不太顺眼,所以按照原意作了一定量的修改。本人水平有限,还望各位高手多指点。
导言
作为一个PHP的程序员,我曾遇到过这么一个客户,他需要一个可以同时上传多个文件的表单。因此,一天夜里我就用了一个小时的时间,找到了最好最简单的方法来完成这个要求。在这篇教程里,“for”这个循环语句,将会成为核心代码。
脚本1:让用户设定需要上传的文件数目
uploadForm1.php
上面的HTML代码非常简单。在这段代码里,我把uploadNeed这个组件的maxlength属性设为1,那么用户所能输入的最大值就是9了。当然,你可以根据需要自行修改这部份。
脚本2:创建动态表单
好了,做好下面的这个页面以后,我们就完成全部工作的一半了。我们用for循环语句来完成这个任务。
uploadForm2.php
在这个脚本里,我们首先要从uploadForm2.php中获取$uploadNeed这个变量。和前页那个页面一样,我们用“for”语句来还创建循环。不同的时,我们需要在循环内使用预定义全局变量$_FILES,我把它传递给了$file_name这个变量。
下一步,我们调用了stripslashes和str_replace两个函数来处理。由于文件名内可能包含一些特殊字符,所以我们使用stripslashes函数来防止上传时出现解释错误。
注意我是如何添加$x这个变量的,在$_FILES里$x会变成数字。这样程序就会知道得处理哪个文件了。
当我们使用copy函数时,才真正的开始把上传的文件复制到指定目前内。最后还加上了一段简单的代码来判断复制是否成功,并把结果输出到屏幕上。
结束语
我肯定这个小小的脚本会使你一次上传多个文件的工作变得更方便。你可以根据下列的提示,在这个脚本内加入相关的代码来完善它。
导言
作为一个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数据库中
- 获取文件的大小并保存到数据库中
- 创建一个临时文件保存上传失败的文件的文件名,并在程序执行完以后再试尝试
- 添加批量删除文件的功能
- 上一篇: PHP快速模板技术
- 下一篇: PHP中的Java扩展
-= 资 源 教 程 =-
文 章 搜 索