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实现读取和编写XML DOM代码
Apr 07 PHP
php检测图片木马多进制编程实践
Apr 11 PHP
php查看请求头信息获取远程图片大小的方法分享
Dec 25 PHP
PHP empty函数报错解决办法
Mar 06 PHP
PHP中使用memcache存储session的三种配置方法
Apr 05 PHP
一款简单实用的php操作mysql数据库类
Dec 08 PHP
PHP答题类应用接口实例
Feb 09 PHP
PHP实现支持加盐的图片加密解密
Sep 09 PHP
thinkPHP框架实现的短信接口验证码功能示例
Jun 20 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
Jul 17 PHP
php json转换相关知识(小结)
Dec 21 PHP
Laravel5.5 数据库迁移:创建表与修改表示例
Oct 23 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 无法载入mysql扩展
2010/03/12 PHP
破解图片防盗链的代码(asp/php)测试通过
2010/07/02 PHP
php使用pdo连接并查询sql数据库的方法
2014/12/24 PHP
PHP AjaxForm提交图片上传并显示图片源码
2016/11/29 PHP
JavaScript的面向对象方法以及差别
2008/03/31 Javascript
AngularJS模块管理问题的非常规处理方法
2015/04/29 Javascript
简介AngularJS的HTML DOM支持情况
2015/06/17 Javascript
JavaScript生成带有缩进的表格代码
2016/06/15 Javascript
js滚轮事件兼容性问题需要注意哪些
2016/11/15 Javascript
JS图片轮播与索引变色功能实例详解
2017/07/06 Javascript
js 毫秒转天时分秒的实例
2017/11/17 Javascript
javascrit中undefined和null的区别详解
2019/04/07 Javascript
详解vue.js移动端配置flexible.js及注意事项
2019/04/10 Javascript
Vue 实现从小到大的横向滑动效果详解
2019/10/16 Javascript
基于javascript实现碰撞检测
2020/03/12 Javascript
关于vue属性使用和不使用冒号的区别说明
2020/10/22 Javascript
js实现鼠标拖曳效果
2020/12/30 Javascript
[04:29]2016国际邀请赛中国区预选赛Ehome战队教练采访
2016/06/27 DOTA
举例介绍Python中的25个隐藏特性
2015/03/30 Python
使用python和pygame绘制繁花曲线的方法
2018/02/24 Python
Django项目实战之用户头像上传与访问的示例
2018/04/21 Python
Python玩转加密的技巧【推荐】
2019/05/13 Python
pyqt5 实现工具栏文字图片同时显示
2019/06/13 Python
Python中使用gflags实例及原理解析
2019/12/13 Python
基于pytorch padding=SAME的解决方式
2020/02/18 Python
windows python3安装Jupyter Notebooks教程
2020/04/13 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
2020/12/04 Python
使用CSS3的appearance属性改变元素的外观的方法
2015/12/12 HTML / CSS
写clone()方法时,通常都有一行代码,是什么?
2012/10/31 面试题
安全目标责任书
2014/07/22 职场文书
2014年质量管理工作总结
2014/12/01 职场文书
爱护环境卫生倡议书
2015/04/29 职场文书
2015年公路路政个人工作总结
2015/07/24 职场文书
Mysql案例刨析事务隔离级别
2021/09/25 MySQL
解析mybatis-plus中的resultMap简单使用
2021/11/23 Java/Android
i7 6700处理器相当于i5几代
2022/04/19 数码科技