***使用PHP实现文件上传和多文件上传

http://www.365mini.com/page/php-upload-file.htm

在PHP程序开发中,文件上传是一个使用非常普遍的功能,也是PHP程序员的必备技能之一。值得高兴的是,在PHP中实现文件上传功能要比在Java、C#等语言中简单得多。下面我们结合具体的代码实例来详细介绍如何通过PHP实现文件上传和多文件上传功能。

要使用PHP实现文件上传功能,我们先来编写两个php文件:index.phpupload.php。其中,index.php页面用于提交文件上传的表单请求,upload.php页面用于接收上传的文件并进行相应处理。

首先,我们来编写一个简单的index.php文件,由于其中涉及的主要是html代码,比较简单,因此不再赘述,index.php页面的详细代码如下:

  1. <?php
  2. //设置编码为UTF-8,以避免中文乱码
  3. header('Content-Type:text/html;charset=utf-8');
  4. ?>
  5. <!DOCTYPE html>
  6. <html>
  7. <head>
  8.     <title>文件上传表单页面</title>
  9. </head>
  10. <body>
  11. <form action="upload.php" method="post" enctype="multipart/form-data">
  12. 文件1:<input name="upload_file1" type="file" /><br/>
  13. 文件2:<input name="upload_file2" type="file" /><br/>
  14. <input type="submit" value="上传" />
  15. </form>
  16. </body>
  17. </html>

值得注意的是,由于在HTTP协议设计之初,它并不支持文件上传功能,form表单的encrypt属性的默认值为application/x-www-form-urlencoded,它只能用于提交一般的表单请求。如果提交的表单中包含需要上传的文件,我们需要将enctype的属性值改为multipart/form-data才能实现文件上传功能。此外,method的属性值必须为post

接着,我们继续编写upload.php文件的代码。

  1. <?php
  2. //设置编码为UTF-8,以避免中文乱码
  3. header('Content-Type:text/html;charset=utf-8');
  4. $first_file = $_FILES['upload_file1'];  //获取文件1的信息
  5. $second_file = $_FILES['upload_file2']; //获取文件2的信息
  6. $upload_dir = 'D:/upload/';   //保存上传文件的目录//处理上传的文件1
  7. if ($first_file['error'] == UPLOAD_ERR_OK){
  8.     //上传文件1在服务器上的临时存放路径
  9.     $temp_name = $first_file['tmp_name'];
  10.     //上传文件1在客户端计算机上的真实名称
  11.     $file_name = $first_file['name'];
  12.     //移动临时文件夹中的文件1到存放上传文件的目录,并重命名为真实名称
  13.     move_uploaded_file($temp_name, $upload_dir.$file_name);
  14.     echo '[文件1]上传成功!<br/>';
  15. }else{
  16.     echo '[文件1]上传失败!<br/>';
  17. }
  18.  
  19. //处理上传的文件2
  20. if ($second_file['error'] == UPLOAD_ERR_OK){
  21.     //上传文件2在服务器上的临时存放路径
  22.     $temp_name = $second_file['tmp_name'];
  23.     //上传文件2在客户端计算机上的真实名称
  24.     $file_name = $second_file['name'];
  25.     //移动临时文件夹中的文件2到存放上传文件的目录,并重命名为真实名称
  26.     move_uploaded_file($temp_name, $upload_dir.$file_name);
  27.     echo '[文件2]上传成功!<br/>';
  28. }else {
  29.     echo '[文件2]上传失败!<br/>';
  30. }
  31. ?>

在PHP中,当浏览器客户端提交过来的表单请求中包含上传的文件时,PHP会将上传的文件先暂时存放在临时目录中(在Windows操作系统中,默认的临时目录一般为C:/Windows/Temp),然后将上传文件的相关信息存放在超全局变量$_FILES中。因此,我们只需要通过$_FILES数组获取上传的文件信息,然后对其进行相应的处理操作即可。下面,我们来看看通过浏览器上传A.gifB.gif两个图片文件时,使用print_r()函数输出超全局变量$_FILES的详细信息:

Array ( [upload_file1] => Array ( [name] => A.gif (客户端上传时的真实文件名称)[type] => image/gif (文件的类型)[tmp_name] => C:\Windows\Temp\php9803.tmp (文件上传到PHP服务器后临时存放的路径)[error] => 0 (错误信息,0表示没有错误)[size] => 87123 (文件大小,单位为字节))[upload_file2] => Array ([name] => B.gif[type] => image/gif[tmp_name] => C:\Windows\Temp\php9813.tmp[error] => 0[size] => 93111)
)

在上面的例子中,我们上传的两个文件参数名分别为upload_file1upload_file2。现在,我们让表单中的多个文件以相同的参数名upload_file,将刚才上传的两个文件以参数数组形式再次提交上传。此时,我们需要将index.php页面中的两个file文件域修改为如下html代码:

  1. 文件1:<input name="upload_file[]" type="file" /><br/>
  2. 文件2:<input name="upload_file[]" type="file" /><br/>

此外,我们还需要对upload.php页面进行相应的修改:

  1. <?php
  2. //设置编码为UTF-8,以避免中文乱码
  3. header('Content-Type:text/html;charset=utf-8');
  4. $fileArray = $_FILES['upload_file'];//获取多个文件的信息,注意:这里的键名不包含[]
  5.  
  6. $upload_dir = 'D:/upload/'; //保存上传文件的目录
  7. foreach ( $fileArray['error'] as $key => $error) {
  8.     if ( $error == UPLOAD_ERR_OK ) { //PHP常量UPLOAD_ERR_OK=0,表示上传没有出错
  9.         $temp_name = $fileArray['tmp_name'][$key];
  10.         $file_name = $fileArray['name'][$key];
  11.         move_uploaded_file($temp_name, $upload_dir.$file_name);
  12.         echo '上传[文件'.$key.']成功!<br/>';
  13.     }else {
  14.         echo '上传[文件'.$key.']失败!<br/>';
  15.     }
  16. }
  17. ?>

同样的,我们使用print_r()函数来查看上面例子中的超全局变量$_FILES的详细信息:

Array ( [upload_file] => Array ( [name] => Array ( [0] => A.gif[1] => B.gif			) [type] => Array ( [0] => image/gif[1] => image/gif			) [tmp_name] => Array ([0] => C:\Windows\Temp\php87B9.tmp[1] => C:\Windows\Temp\php87BA.tmp) [error] => Array ( [0] => 0[1] => 0			) [size] => Array ( [0] => 87123[1] => 93111			))
)

 

备注1:在PHP的默认配置下,上传的文件大小超出一定的范围将会出错,请参考文章《如何修改PHP上传文件的大小限制》。

 

备注2:上述处理文件上传的PHP代码只是一个简单的入门示例,并不能直接作为正式代码使用,因为还有许多需要额外注意的安全因素没有考虑,例如:文件的类型、文件的大小以及上传文件的名称重复等。

 

备注3:如果上传的文件名称中包含中文,可能引起文件名称乱码问题。此时,需要使用函数iconv()来转换文件名称的编码,你可以参考本站文章《PHP中访问中文名称的文件时出错》,其中提供了使用iconv()函数转换字符串编码的代码示例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/459520.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ajax 如何使 dropdownlist 无刷新,Jquery实现无刷新DropDownList联动实现代码

先看HTML,我们引用Jquery,放两个DropDownList:#ddlEmployeeCars{display:none;position:absolute;top:50px;left:9px;}接着写核心的Script:$(function() {var $ddl $("select[name$ddlEmployee]");var $ddlCars $("select[name$ddlEmployeeCars]");$ddl.…

famous javascript library.

https://famo.us/ THE ULTIMATE WEB PLATFORM FOR DEVELOPERS AND DESIGNERS转载于:https://www.cnblogs.com/feika/p/4382525.html

MyEclipse/Eclipse 中使用javap

-c -classpath ${workspace_loc}\${project_name}\bin ${java_type_name} 特别强调我所掉过的一个坑&#xff1a;这行配置bin后面空一格而非\&#xff0c;就这个小问题让我吃了苦头 有知道原因的望告知。。。。。。。真想了解原因 转载于:https://www.cnblogs.com/blueFlowers…

怎样王远端服务器上传文件,传王电子传真使用指南-Freefax传真服务器,传王A6,免费传真...

接线方案传王A6品牌宣传为『传王&#xff0c;最棒的&#xff01;传王&#xff0c;传真之王。』,并不是一句空泛的宣传。传王A6充分考虑用户的办公环境&#xff0c;能与电话很好地混合使用&#xff0c;通过不同的接线方案&#xff0c;配合丰富的权限管理和系统设定&#xff0c;满…

《梦断代码》阅读笔记之第8章至最后

以下是我读了梦断代码第八章之后的读书笔记&#xff1a; 1.自己做的软件自己一定要用&#xff0c;即“吃你自己的狗食”&#xff0c;自己的软件开发出来后自己都不会用那么还要指望别人用不成&#xff1f; 2.在软件开发编写代码的时候&#xff0c;当你把系统的一块新部件放进去…

《JavaScript高级程序设计》chapter 1: javascript 简介

1.2.2 文档对象模型DHTML的出现让开发人员无需重新加载页面就可以修改其外观了。1.2.3 浏览器对象模型&#xff08;BOM&#xff09;BOM真正与众不同的地方在于他作为javascript实现的一部分&#xff0c;但是却没有相关的标准。这些问题咋html5中得到解决。人们习惯上把所有针对…

nginxlua文件服务器权限,通过lua进行nginx的权限控制

nginx_lua的安装nginx使用luajit进行编译安装使用openresty进行yum安装openresty中将lua和nginx进行封装&#xff0c;详情可查看openresty官网openresty相关启动命令service openresty startngx_lua的相关api使用说明及相关使用ngx_lua的日常使用场景ngx_lua的执行顺序&#xf…

WINCC访问OPC服务器显示叹号,本机浏览opcserver.wincc ,无法打开-工业支持中心-西门子中国...

WinCC OPC服务器和OPC客户机之时的数据交换通过DCOM进行。安装WinCC后&#xff0c;WinCC OPC服务器的DCOM要设置正确。如下情况设置必须改变&#xff1a;? 如果登记到OPC客户机或服务器计算机的用户没有管理员员限? 如果用不同于OPC客户机的帐号登记OPC服务器。注意下列说明描…

CSS3 选择器 基本选择器介绍

CSS是一种用于屏幕上渲染html&#xff0c;xml等一种语言&#xff0c;CSS主要是在相应的元素中应用样式&#xff0c;来渲染相对应用的元素&#xff0c;那么这样我们选择相应的元素就很重要了&#xff0c;如何选择对应的元素&#xff0c;此时就需要我们所说的选择器。选择器主要是…

逆水寒7月19服务器维护,逆水寒7月19日更新维护公告 更新内容汇总

3. 战斗体验优化&#xff1a;1) 优化了动作模式下Alt数字快捷键选择队友的操作&#xff0c;我们已经安排大量策划专注使用3D模式和动作模式&#xff0c;后续将继续优化部分技能在3D模式下的易用性。2) 大幅提升部分日常副本的可视距离&#xff0c;现在可看到更远处的…

Linux下ejabberd安装配置

为什么80%的码农都做不了架构师&#xff1f;>>> Linux下ejabberd安装配置 1、下载Ejabberd安装包 wget http://www.process-one.net/downloads/ejabberd/2.1.13/ejabberd-2.1.13-linux-x86_64-installer.run 也可以在直接在官网上下载 ejabberd-15.11-linux-x86…

unity5, custom PBS shader

unity5中引入了基于物理着色(PBS)的Standard shader。由于这种着色器通过调节参数和贴图可逼真模拟各种硬质表面&#xff0c;所以不必再像unity4时代那样需要对各种质感材质单独编写着色器&#xff0c;而且能得到更好的效果(参考&#xff1a;http://docs.unity3d.com/Manual/sh…

win服务器文件夹权限设置密码,win服务器 文件夹权限设置

win服务器 文件夹权限设置 内容精选换一换开发过程中&#xff0c;您有任何问题可以在github上提交issue&#xff0c;或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。在OBS中&#xff0c;用户操作的基本数据单元是对象。OBS PHP SDK…

Java定时任务以及ScheduledThreadPoolExecutor需要注意的问题

Java提供Timer和ScheduledThreadPoolExecutor两个类实现定时任务&#xff0c;其中Timer简单易用&#xff0c;但所有任务都是由同一个线程来调度&#xff0c;任务串行执行&#xff0c;任务之间存在互相干扰&#xff0c;一是前一个任务的延迟会导致后面的任务延迟&#xff0c;二是…

重启php-fpm的方法

ps -ef|grep "php-fpm: master process"|grep -v grep|awk {print $2}|xargs kill -USR2 优点&#xff1a;简单&#xff0c;无需写脚本。无需依赖其他工具缺点&#xff1a;不能区分池子&#xff0c;不够精准转载于:https://www.cnblogs.com/yaoyi/p/4398636.html

手机文件管理ftp服务器,ftp工具手机版(ftp文件传输管理工具)V1.0.2 手机版

ftp工具手机版(ftp文件传输管理工具)是一款非常实用的ftp文件管理应用工具。主要作用是将手机ftp上的文件数据快速传输到电脑上&#xff0c;或者将电脑上的文件传输到手机上&#xff0c;实现双向传输&#xff0c;并且传输速度十分快&#xff0c;ftp工具是一款很专业的传输软件&…

Android 获得ImageView中Image的绘制大小

2019独角兽企业重金招聘Python工程师标准>>> ImageView在显示图片的时候&#xff0c;受限于屏幕大小&#xff0c;和图片宽高。通常图片是被缩放过&#xff0c;且不是宽和高都充满ImageView的。 此时&#xff0c;我们如何获得Image被实际绘制的宽高呢&#xff1f; //…

Quartz2D指定显示范围

在qq中&#xff0c;可以看到头像是圆形显示的&#xff0c;通过CGContextClip可以设置 CGContextRef contextUIGraphicsGetCurrentContext();CGContextAddEllipseInRect(context, CGRectMake(100, 100, 100, 100));CGContextClip(context);UIImage *img[UIImage imageNamed:&quo…

当前系统时间与服务器时间,操作系统时间和服务器时间

操作系统时间和服务器时间 内容精选换一换文章目录计算机操作系统(一)1 操作系统的目标和作用1.1 操作系统的目标 1.2 操作系统的目标 2 操作系统的发展历程2.1 未配置操作系统的计算机2.2 单道批处理系统2.3 多道批处理系统2.4 分时系统2.5 实时系统 3 操作系统的基本特性3.1 …

【学神-RHEL7】1-3-Linux基本命令和配置服务器来电后自动开机

本节所讲内容&#xff1a;Linux终端介绍Shell提示符Bash Shell基本语法基本命令的使用&#xff1a;ls、pwd、cd查看系统和BIOS硬件时间Linux如何获得帮助Linux关机命令&#xff1a;shutdow、init等Linux 7个启动级别创建一个方便快捷实验环境快照设置服务器在来电后自动开机Lin…