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 相关文章推荐
如何跨站抓取别的站点的页面的补充
Oct 09 PHP
php mysql 判断update之后是否更新了的方法
Jan 10 PHP
Ajax+PHP快速上手及简单应用说明
Jul 24 PHP
PHP与Java进行通信的实现方法
Oct 21 PHP
mac下安装nginx和php
Nov 04 PHP
PHP使用ffmpeg给视频增加字幕显示的方法
Mar 12 PHP
CodeIgniter针对lighttpd服务器URL重写的方法
Jun 10 PHP
PHP的PDO常用类库实例分析
Apr 07 PHP
php版微信公众平台开发之验证步骤实例详解
Sep 23 PHP
thinkphp分页实现效果
Oct 13 PHP
PHP二进制与字符串之间的相互转换教程
Oct 14 PHP
php中yar框架实例用法讲解
Dec 27 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 上传文件大小限制
2009/07/05 PHP
php 分库分表hash算法
2009/11/12 PHP
php 安全过滤函数代码
2011/05/07 PHP
PHP新手NOTICE错误常见解决方法
2011/12/07 PHP
thinkphp的CURD和查询方式介绍
2013/12/19 PHP
PHP输出缓冲控制Output Control系列函数详解
2015/07/02 PHP
配置Nginx+PHP的正确思路与过程
2016/05/10 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
jQuery获取iframe的document对象的方法
2014/10/10 Javascript
浅谈JavaScript Date日期和时间对象
2014/12/29 Javascript
javascript实现对表格元素进行排序操作
2015/11/18 Javascript
BootStrap点击下拉菜单项后显示一个新的输入框实现代码
2016/05/16 Javascript
浅谈JavaScript的全局变量与局部变量
2016/06/10 Javascript
js实现的页面加载完毕之前loading提示效果完整示例【附demo源码下载】
2016/08/02 Javascript
jQuery弹出层插件popShow(改进版)用法示例
2017/01/23 Javascript
vue中mint-ui环境搭建详细介绍
2017/04/06 Javascript
JS禁止浏览器右键查看元素或按F12审查元素自动关闭页面示例代码
2017/09/07 Javascript
Web技术实现移动监测的介绍
2017/09/18 Javascript
ES6 Object属性新的写法实例小结
2019/06/25 Javascript
vue实现Excel文件的上传与下载功能的两种方式
2019/06/28 Javascript
浅谈layer的Icon样式以及一些常用的layer窗口使用方法
2019/09/11 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
2020/01/18 Javascript
在Vue中使用antv的示例代码
2020/06/29 Javascript
Python实现八大排序算法
2016/08/13 Python
Python爬虫DNS解析缓存方法实例分析
2017/06/02 Python
python提取图像的名字*.jpg到txt文本的方法
2018/05/10 Python
win10系统下Anaconda3安装配置方法图文教程
2018/09/19 Python
python脚本实现音频m4a格式转成MP3格式的实例代码
2019/10/09 Python
在python中利用pycharm自定义代码块教程(三步搞定)
2020/04/15 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
2020/06/09 Python
PyTorch-GPU加速实例
2020/06/23 Python
Python使用urlretrieve实现直接远程下载图片的示例代码
2020/08/17 Python
法拉利英国精品店:Ferraris Boutique UK
2019/07/20 全球购物
让世界充满爱演讲稿
2014/05/24 职场文书
Redis实现订单自动过期功能的示例代码
2021/05/08 Redis
如何给HttpServletRequest增加消息头
2021/06/30 Java/Android