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 相关文章推荐
web server使用php生成web页面的三种方法总结
Oct 28 PHP
php中url函数介绍及使用示例
Feb 13 PHP
PHP正则提取不包含指定网址的图片地址的例子
Apr 21 PHP
PHP mkdir()无写权限的问题解决方法
Jun 19 PHP
php实现文件下载代码分享
Aug 19 PHP
php使用APC实现实时上传进度条功能
Oct 26 PHP
php生成带logo二维码方法小结
Apr 08 PHP
PHP自定义函数判断是否为Get、Post及Ajax提交的方法
Jul 27 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
Feb 08 PHP
PHP小程序支付功能完整版【基于thinkPHP】
Mar 26 PHP
php array_chunk()函数用法与注意事项
Jul 12 PHP
Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解
Oct 11 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中Session可能会引起并发问题
2015/06/26 PHP
详解WordPress中简码格式标签编写的基本方法
2015/12/22 PHP
PHP addAttribute()函数讲解
2019/02/03 PHP
JavaScript加密解密7种方法总结分析
2007/10/07 Javascript
JavaScript confirm选择判断
2008/10/18 Javascript
jquery imgareaselect 使用利用js与程序结合实现图片剪切
2009/07/30 Javascript
js与jquery中获取当前鼠标的x、y坐标位置的代码
2011/05/23 Javascript
js 输出内容到新窗口具体实现代码
2013/05/31 Javascript
js随机生成26个大小写字母
2016/02/12 Javascript
两种方法解决javascript url post 特殊字符转义 + &amp; #
2016/04/13 Javascript
JS中如何实现点击a标签返回页面顶部的问题
2017/01/19 Javascript
微信小程序城市定位的实现实例(获取当前所在国家城市信息)
2017/05/17 Javascript
javascript将list转换成树状结构的实例
2017/09/08 Javascript
mongoose设置unique不生效问题的解决及如何移除unique的限制
2017/11/07 Javascript
JQuery搜索框自动补全(模糊匹配)功能实现示例
2019/01/08 jQuery
Vuex新手的理解与使用详解
2019/05/31 Javascript
构建大型 Vue.js 项目的10条建议(小结)
2019/11/14 Javascript
vue 实现把路由单独分离出来
2020/08/13 Javascript
[04:26]DOTA2上海特锦赛小组赛第二日 TOP10精彩集锦
2016/02/27 DOTA
Python中下划线的使用方法
2015/03/27 Python
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
2018/04/19 Python
python3+PyQt5实现自定义分数滑块部件
2018/04/24 Python
CentOS 7 安装python3.7.1的方法及注意事项
2018/11/01 Python
python 实现多线程下载m3u8格式视频并使用fmmpeg合并
2019/11/15 Python
Python内置数据类型list各方法的性能测试过程解析
2020/01/07 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
2020/03/06 Python
python程序输出无内容的解决方式
2020/04/09 Python
基于html5 canvas实现漫天飞雪效果实例
2014/09/10 HTML / CSS
美国最大的宠物用品零售商:PetSmart
2016/11/14 全球购物
美国领先的个性化礼品商城:Personalization Mall
2019/07/27 全球购物
毕业生多媒体设计求职信
2013/10/12 职场文书
小学生九一八纪念日83周年演讲稿500字
2014/09/17 职场文书
房屋买卖委托书格式范本格式
2014/10/13 职场文书
2015人事行政工作总结范文
2015/05/21 职场文书
Apache Linkis 中间件架构及快速安装步骤
2022/03/16 Servers
Golang解析JSON对象
2022/04/30 Golang