上传多个文件的PHP脚本
2015-01-24信息快讯网
导言
作为一个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 discuz 主题表和回帖表的设计
php 获取mysql数据库信息代码
php 删除记录实现代码
php 异常处理实现代码
php 表单数据的获取代码
PHP 操作文件的一些FAQ总结
php实现从ftp服务器上下载文件树到本地电脑的程序
php 动态多文件上传
php zlib压缩和解压缩swf文件的代码
php 文件状态缓存带来的问题
php 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
利用discuz实现PHP大文件上传应用实例代码
PHP5+UTF8多文件上传类
php下实现在指定目录搜索指定类型文件的函数
在服务端进行目录建立、删除,文件上传、删除的过程的php代码
swfupload 多文件上传实现代码
PHP写入WRITE编码为UTF8的文件的实现代码
在PHP中使用与Perl兼容的正则表达式
使PHP自定义函数返回多个值
PHP中for循环语句的几种变型
用PHP中的 == 运算符进行字符串比较
PHP图片上传类带图片显示
整合了前面的PHP数据库连接类~~做成一个分页类!
目录,文件操作详谈―PHP
php获得文件扩展名三法
文件系统基本操作类
PHP编程中八种常见的文件操作方式
让你同时上传 1000 个文件 (一)
让你同时上传 1000 个文件 (二)
下载文件的点击数回填
PHP实现图片简单上传
php上传、管理照片示例
对javascript和select部件的结合运用
树型结构列出指定目录里所有文件的PHP类
给多个地址发邮件的类
以文本方式上传二进制文件的PHP程序