PHP多个文件上传到服务器实例


Posted in PHP onOctober 29, 2014

本文实例讲述了PHP多个文件上传到服务器的实现方法。对于多个文件同时上传到服务器的情况来说,我们需要使用到数组形式的参数传递及数据的遍历上传即可,具体的操作步骤分析如下:

一、实例说明

上传图片到服务器,是程序开发过程中必不可少的一个功能。它不但可以达到图片共享的目的,而且可以提高网站的访问量,丰富网站的内容。在本实例中,讲解如何通过POST方式实现多图片上传。

二、关键技术

多文件上传的关键是如何定义上传文件元素的名称及如何判断上传文件的数量。在本实例中,以数组的形式定义上传文件的名称(上传文件的名称是“files[]”)。为了达到可以上传任意数量图片(4个图片以内)的目的,在对上传文件进行处理的过程中应用array_filter()函数和回调函数去除数组中的空元素。

array_filter()函数,用回调函数过滤数组中的单元,语法如下:

array array_filter(array input[,callback callback])

array_filter()函数依次将input数组中的每个值传递到callback函数。如果callback函数返回TRUE,则input数组的当前值会被包含在返回的结果数组中,并且数组的键名保留不变。

说明:在回调函数中不要对数组进行修改操作,例如,增加或者删除数组中的元素,如果一旦数组改变,那么此函数的运用也就没有意义了。如果没有提供callback()函数,array_filter()将删除input中所有等值为FALSE的元素。
本实例中定义的回调函数是check(),用于验证数组中的元素值是否为空,其语法如下:

function check($var){//验证数组的返回值是否为空

return($var!="");

}

说明:通过POST方法实现多图片上传,在创建form表单时,必须指定enctype="multipart/form-data"属性。如果要通过隐藏域MAX_FILE_SIZE的值对上传文件的大小进行控制,那么必须将隐藏放置在上传文件的文件域之前,否则是不会起作用的。

三、设计过程

(1)创建index.php文件。添加表单,设置文件域、提交按钮,使用POST方法,设置enctype="multipart/form-data",将数据提交到index_ok.php页,完成多个文件的上传操作,其关键代码如下:

<table width="750"border="0"cellspacing="0"cellpadding="0">

<form action="index_ok.html"method="post"enctype="multipart/form-data"name="form1">

 <tr>

 <td width="100"height="25"align="right"class="STYLE1">内容1:</td>

 <td width="150"align="center"><input name="files[]"type="text"id="files[]"size="15"></td>

 <td align="left"><input name="picture[]"type="file"id="pcture[]"size>="30"></td>

 </tr>

 <tr>

 <td height="25"align="right"class="STYLE1">内容2:</td>

 <td width="center"><input name="files[]"type="text"id="files[]"size="15"></td>

 <td align="left"><input name="picture[]"type="file"id="pcture[]"size>="30"></td>

 </tr>

 <tr>

<td colspan="3"align="center">

 <input type="image"name="imageField"src="images/bg_09.jpg">    

 <input type="image"name="imgeField2"src="images/bg_11.jpg"></td>

</tr>

</form>

 </table>

(2)在index.php文件中,连接数据库,读取数据库中存储的数据,实现上传文件的分页输出。代码请参考光盘中的相关内容。

(3)创建index.php文件获取表单中提交的数据,将多个文件存储到服务器中,将文件的名称和存储路径存储到数据库中,其代码如下:

<?php

header("Content-type:text/html;charset=UTF-8"); //设置文件编码格式

include"conn/conn.php"; //包含数据库链接文件

if($_POST[files]!=""){

if(! is_dir("./upfile")){

mkdir("./upfile");//创建上传文件存储文件夹

}

$data=date("Y-m-d H:m:s");//定义时间

function check($var){ //验证数组的返回值是否为空

 return($var!="");//如果不为空则返回数组元素

}

$files=array_filter($_POST["files"],"check");//去除数组中空值

$array=array_filter($_FILES["picture"]["name"],"check"); //去除数组中空值

foreach=($aarray as $key=>value){ //循环读取数组中数据

 $path='upfile/'.time().$key.strtolower(strstr($value,".")); //定义上传文件存储位置

 move_uploaded_file($_FILES["picture"]["tmp_name"][$key],$path);//执行上传操作

 $query="insert into tb_up_file(file_test,data,file_name)values('$path','$data''$files[$key]')";

 $result=mysql_query($query);

}

echo"<script>

alert('图片上传成功');window.location.href='index.html';</script>";

 }

 ?>

四、技巧补充

通过伪静态技术隐藏PHP文件后缀。
首先,修改Apache服务器的配置文件httpd.conf。打开httpd.conf文件,定位到如下位置:

#LoadModule rewrite_module modules/mod_rewrite.so

将该项前面的“#”去掉后启动该项。
然后,查找httpd.conf文件,找到其中的AllowOverride项,将它的值都修改为All。保存并重新启动Apache服务器,使修改生效。
最后,在实例根目录下创建.htaccess文件,实现对PHP文件后缀的隐藏操作。.htaccess文件的代码如下:
RewriteEngine On#启动项

RewriteRule^index.html$ index.php

RewriteRule^ndex_ok.html$ index_ok.php

RewriteRule^index-([0-9]+)-([0-9]+)-([0-9]+)\.html$ index.php?vv=$1&ljjl=$2&page=$3[L]

通过正则表达式对文件的后缀和传递的参数进行匹配,完成对PHP文件后缀的隐藏操作。

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
E路文章系统PHP
Dec 11 PHP
解决GD中文乱码问题
Feb 14 PHP
discuz论坛 用户登录 后台程序代码
Nov 27 PHP
PHP高自定义性安全验证码代码
Nov 27 PHP
使用array mutisort 实现按某字段对数据排序
Jun 18 PHP
Ajax+PHP快速上手及简单应用说明
Jul 24 PHP
PHP统计二维数组元素个数的方法
Nov 12 PHP
php+memcache实现的网站在线人数统计代码
Jul 04 PHP
PHPExcel内存泄漏问题解决方法
Jan 23 PHP
一段实用的php验证码函数
May 19 PHP
微信随机生成红包金额算法php版
Jul 21 PHP
php+ajax简单实现全选删除的方法
Dec 06 PHP
php跨站攻击实例分析
Oct 28 #PHP
php获取根域名方法汇总
Oct 28 #PHP
3款值得推荐的微信开发开源框架
Oct 28 #PHP
smarty中英文多编码字符截取乱码问题解决方法
Oct 28 #PHP
smarty中js的调用方法示例
Oct 27 #PHP
Smarty中常用变量操作符汇总
Oct 27 #PHP
Smarty中调用FCKeditor的方法
Oct 27 #PHP
You might like
PHP实现Javascript中的escape及unescape函数代码分享
2015/02/10 PHP
PHP数组编码gbk与utf8互相转换的两种方法
2016/09/01 PHP
php中__toString()方法用法示例
2016/12/07 PHP
yii2使用GridView实现数据全选及批量删除按钮示例
2017/03/01 PHP
PHP实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】
2017/06/29 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
js写一个字符串转成驼峰的实例
2013/06/21 Javascript
jQuery中的height innerHeight outerHeight区别示例介绍
2014/06/15 Javascript
js中动态创建json,动态为json添加属性、属性值的实例
2016/12/02 Javascript
COM组件中调用JavaScript函数详解及实例
2017/02/23 Javascript
浅谈Node.js轻量级Web框架Express4.x使用指南
2017/05/03 Javascript
Vuex和前端缓存的整合策略详解
2017/05/09 Javascript
node.js调用Chrome浏览器打开链接地址的方法
2017/05/17 Javascript
微信小程序 新建登录页并实现tabBar隐藏
2017/06/13 Javascript
AngularJS中scope的绑定策略实例分析
2017/10/30 Javascript
jQuery实现动态添加节点与遍历节点功能示例
2017/11/09 jQuery
JavaScript正则表达式函数总结(常用)
2018/02/22 Javascript
jQuery实现的自定义轮播图功能详解
2018/12/28 jQuery
vue中的双向数据绑定原理与常见操作技巧详解
2020/03/16 Javascript
vue自定义组件(通过Vue.use()来使用)即install的用法说明
2020/08/11 Javascript
从零学Python之引用和类属性的初步理解
2014/05/15 Python
Python栈算法的实现与简单应用示例
2017/11/01 Python
python 重定向获取真实url的方法
2018/05/11 Python
Flask框架中request、请求钩子、上下文用法分析
2019/07/23 Python
基于Python数据结构之递归与回溯搜索
2020/02/26 Python
Lampegiganten丹麦:欧洲领先的照明网上商店
2018/04/25 全球购物
华为消费者德国官方网站:HUAWEI德国
2020/11/03 全球购物
商务日语专业毕业生求职信
2013/10/26 职场文书
餐饮企业总经理岗位职责范文
2014/02/18 职场文书
党员群众路线对照检查材料思想汇报
2014/09/17 职场文书
检讨书范文
2015/01/27 职场文书
确保工程质量承诺书
2015/04/29 职场文书
学校2016年九九重阳节活动总结
2016/04/01 职场文书
读完《骆驼祥子》的观后感!
2019/07/05 职场文书
OpenCV中resize函数插值算法的实现过程(五种)
2021/06/05 Python
原型和原型链 prototype和proto的区别详情
2021/11/02 Javascript