php轻松实现文件上传功能


Posted in PHP onMarch 03, 2016

本文分为五个部分针对php上传文件进行分析讲解,具体内容如下

  • 文件上传变量
  • 将服务器上的临时文件移动到指定目录下
  • php.ini上传相关配置
  • error错误号
  • 单文件上传实例

1.文件上传变量

//$_FILES:文件上传变量
 #name 文件的名称
 #type 文件的类型
 #tmp_name 临时文件名
 #size 文件的大小
 #error 错误信息

$filename = $_FILES["myFile"]["name"];
$type = $_FILES["myFile"]["type"];
$tmp_name = $_FILES["myFile"]["tmp_name"];
$size = $_FILES["myFile"]["size"];
$error = $_FILES["myFile"]["error"];

2.将服务器上的临时文件移动到指定目录下

//1.move_uploaded_file($tmp_name,$destination):将服务器上的临时文件移动到指定目录下
 #上传后文件名字,移动成功返回true,否则返回false
move_uploaded_file($tmp_name,"D:/".$filename);

//2.copy($tmp_name,$destination)
copy($tmp_name,"D:/".$filename);

3.php.ini上传相关配置

# file_uploads=On 支持HTTP上传
 # upload_tmp_dir="" 临时文件保存的目录
 # upload_max_filesize=2M 允许上传文件的最大值
 # max_file_uploads=20 允许一次上传的最大文件数
 # post_max_size=8M post方式发送数据的最大值

 # max_execution_time = 1 设置了脚本被解析器终止之前允许的最大执行时间,单位为秒,防止程序写的不好而占尽服务器资源
 # max_input_time = 60 脚本解析输入数据允许的最大时间,单位为秒
 # max_input_nesting_level = 64 设置输入变量的嵌套深度
 # max_input_vars = 1000 接受多少输入的变量
 # memory_limit = 128M 最大单线程的独立内存使用量

4.error错误号

# 0,没有错误发生,文件上传成功。
 # 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
 # 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
 # 3,文件只有部分被上传。
 # 4,没有文件被上传。
 # 6,找不到临时文件夹。
 # 7,文件写入失败。
 # 8,上传的文件被PHP扩展程序中断

5.单文件上传实例
form.html

<!doctype html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Document</title>
</head>
<body>
<form action="fileUpload.php" method="post" enctype="multipart/form-data">
 请选择你要上传的文件:
 <input type="file" name="myFile"><br>
 <input type="submit" value="上传文件">

 <!--限制客户端上传文件的最大值 隐藏域另起一行-->
 <!--<input type="hidden" name="MAX_FILE_SIZE" value="字节数">-->

 <!--accept设置上传文件的类型-->
 <!--<input type="file" name="myfile" accept="image/jpg,image/png,image/gif">-->
</form>
</body>
</html>

fileUpload.php

header("content-type:text/html;charset:utf-8");
$fileInfo = $_FILES["myFile"];

$filename = $fileInfo["name"];
$type = $fileInfo["type"];
$error = $fileInfo["error"];
$size = $fileInfo["size"];
$tmp_name = $fileInfo["tmp_name"];
$maxSize=2*1024*1024;//允许的最大值
$allowExt=array("jpeg","jpg","gif");
$flag = true;//检测是否为真实的图片类型

//判断错误号
if($error == 0){
 //判断上传文件的大小
 if($size>$maxSize){
 exit("上传文件过大");
 }
 
 //检测文件类型
 //取出文件扩展名
 $ext = pathinfo($filename,PATHINFO_EXTENSION);
 if(!in_array($ext,$allowExt)){
 exit("非法文件类型");
 }

 //检测是否为真实的图片类型
 if($flag){
 if(@!getimagesize($tmp_name)){
  exit("不是正的图片类型");
 }
 }

 //创建目录
 $path = "D:/test/";
 if(!file_exists($path)){
 mkdir($path,0777,true);
 chmod($path,0777);
 }

 //确保文件名唯一,防止重名覆盖
 $uniName = md5(uniqid(microtime(true),true)).".".$ext;
 $destination = $path.$uniName;
 if(@move_uploaded_file($tmp_name,$destination)){
 echo "上传成功";
 }else{
 echo "上传失败";
 }
}else{
 switch($error){
 case 1:
 case 2:
 case 3:
 case 4:
 case 6:
 case 7:
 case 8:
  echo "上传错误";
  break;
 }
}

希望本文所述对大家学习php程序设计有所帮助。

PHP 相关文章推荐
一个php作的文本留言本的例子(一)
Oct 09 PHP
实现了一个PHP5的getter/setter基类的代码
Feb 25 PHP
php 读取shell管道传输过来的内容
Mar 01 PHP
PHP魔术方法__GET、__SET使用实例
Nov 25 PHP
php银联网页支付实现方法
Mar 04 PHP
php发送邮件的问题详解
Jun 22 PHP
最准确的php截取字符串长度函数
Oct 29 PHP
微信获取用户地理位置信息的原理与步骤
Nov 12 PHP
PHP5.5新特性之yield理解与用法实例分析
Jan 11 PHP
php数组和链表的区别总结
Sep 20 PHP
Laravel框架控制器的middleware中间件用法分析
Sep 30 PHP
php 输出缓冲 Output Control用法实例详解
Mar 03 PHP
php编程每天必学之验证码
Mar 03 #PHP
简单介绍PHP非阻塞模式
Mar 03 #PHP
浅析php设计模式之数据对象映射模式
Mar 03 #PHP
Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
Mar 02 #PHP
PHP MVC框架路由学习笔记
Mar 02 #PHP
深入浅析用PHP实现MVC
Mar 02 #PHP
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
Mar 01 #PHP
You might like
PHP删除特定数组内容并且重建数组索引的方法.
2011/03/25 PHP
PHP生成图片验证码、点击切换实例
2014/06/25 PHP
php实现将上传word文件转为html的方法
2015/06/03 PHP
phalcon框架使用指南
2016/02/23 PHP
YII Framework框架教程之使用YIIC快速创建YII应用详解
2016/03/15 PHP
在浏览器中获取当前执行的脚本文件名的代码
2011/07/19 Javascript
javascript 实现简单的table排序及table操作练习
2012/12/28 Javascript
使用javascript创建快捷方式的简单实例
2013/08/09 Javascript
处理及遍历XML文档DOM元素属性及方法整理
2013/08/23 Javascript
js的Boolean对象初始值示例
2014/03/04 Javascript
jQuery实现的五子棋游戏实例
2015/06/13 Javascript
js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解
2015/11/09 Javascript
js防刷新的倒计时代码 js倒计时代码
2017/09/06 Javascript
用js实现before和after伪类的样式修改的示例代码
2017/09/07 Javascript
Vue自定义过滤器格式化数字三位加一逗号实现代码
2018/03/23 Javascript
微信小程序实现tab页面切换功能
2018/07/13 Javascript
解决IE11 vue +webpack 项目中数据更新后页面没有刷新的问题
2018/09/25 Javascript
[03:03]DOTA2校园争霸赛 济南城市决赛欢乐发奖活动
2013/10/21 DOTA
Python实现的数据结构与算法之双端队列详解
2015/04/22 Python
Python用imghdr模块识别图片格式实例解析
2018/01/11 Python
Python3单行定义多个变量或赋值方法
2018/07/12 Python
Python列表切片操作实例总结
2019/02/19 Python
opencv导入头文件时报错#include的解决方法
2019/07/31 Python
pandas参数设置的实用小技巧
2020/08/23 Python
FitFlop澳大利亚官网:英国符合人体工学的鞋类品牌
2017/06/05 全球购物
StringBuilder和String的区别
2015/05/18 面试题
九年级语文教学反思
2014/02/04 职场文书
建议书的格式
2014/05/12 职场文书
教师自我剖析材料
2014/09/29 职场文书
侵犯商业秘密的律师函
2015/05/27 职场文书
拉贝日记观后感
2015/06/05 职场文书
活动新闻稿范文
2015/07/17 职场文书
2015年度个人工作总结报告
2015/10/24 职场文书
志愿服务心得体会
2016/01/15 职场文书
浅谈自定义校验注解ConstraintValidator
2021/06/30 Java/Android
python如何利用cv2.rectangle()绘制矩形框
2022/12/24 Python