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 相关文章推荐
phpMyAdmin 安装及问题总结
May 28 PHP
php中过滤非法字符的具体实现
Oct 29 PHP
php实现的ping端口函数实例
Nov 12 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
Sep 29 PHP
CI框架AR操作(数组形式)实现插入多条sql数据的方法
May 18 PHP
php版微信发红包接口用法示例
Sep 23 PHP
Ajax实现对静态页面的文章访问统计功能示例
Oct 10 PHP
PHP实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】
Jun 29 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
Sep 04 PHP
PHP中OpenSSL加密问题整理
Dec 14 PHP
php微信开发之图片回复功能
Jun 14 PHP
discuz论坛更换域名,详细文件修改步骤
Dec 09 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常用Output和ptions/Info函数集介绍
2013/06/19 PHP
PHP 读取大文件的X行到Y行内容的实现代码
2013/06/24 PHP
PHP内核探索之解释器的执行过程
2015/12/22 PHP
php 的反射详解及示例代码
2016/08/25 PHP
Ubuntu彻底删除PHP7.0的方法
2018/07/27 PHP
PHP PDOStatement::fetchAll讲解
2019/01/31 PHP
用JavaScript获取网页中的js、css、Flash等文件
2006/12/20 Javascript
学习ExtJS TextField常用方法
2009/10/07 Javascript
js静态方法与实例方法分析
2011/07/04 Javascript
firefox下input type=&quot;file&quot;的size是多大
2011/10/24 Javascript
JavaScript中常用的运算符小结
2012/01/18 Javascript
不用一句js代码初始化组件
2016/01/27 Javascript
Bootstrap每天必学之折叠
2016/04/12 Javascript
jQuery获取单击节点对象的方法
2016/06/02 Javascript
vue.js实现只弹一次弹框
2018/01/29 Javascript
vue插件实现v-model功能
2018/09/10 Javascript
JavaScript实现获取两个排序数组的中位数算法示例
2019/02/26 Javascript
Javascript删除数组里的某个元素
2019/02/28 Javascript
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
2019/08/07 Javascript
Vue内部渲染视图的方法
2019/09/02 Javascript
微信小程序音乐播放器开发
2019/11/20 Javascript
JS操作Fckeditor的一些常用方法(获取、插入等)
2020/02/19 Javascript
Python内置函数dir详解
2015/04/14 Python
python3使用pyqt5制作一个超简单浏览器的实例
2017/10/19 Python
Python中利用xpath解析HTML的方法
2018/05/14 Python
python使用selenium实现批量文件下载
2019/03/11 Python
教你一步步利用python实现贪吃蛇游戏
2019/06/27 Python
Python读取xlsx文件的实现方法
2019/07/04 Python
荷兰之家英文站:Holland at Home
2016/10/26 全球购物
室内设计实习自我鉴定
2013/09/25 职场文书
日语翻译个人求职的自我评价
2013/10/14 职场文书
法人单位授权委托书范文
2014/10/06 职场文书
2014年英语教师工作总结
2014/12/03 职场文书
美丽的大脚观后感
2015/06/03 职场文书
Python列表删除重复元素与图像相似度判断及删除实例代码
2021/05/07 Python
MySQL为数据表建立索引的原则详解
2022/03/03 MySQL