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初学者们头痛的十四个问题
Jan 15 PHP
用PHP实现读取和编写XML DOM代码
Apr 07 PHP
php smarty truncate UTF8乱码问题解决办法
Jun 13 PHP
PHP递归调用数组值并用其执行指定函数的方法
Apr 01 PHP
php获取远程文件内容的函数
Nov 02 PHP
php实现批量上传数据到数据库(.csv格式)的案例
Jun 18 PHP
PHP代码重构方法漫谈
Apr 17 PHP
PHP中cookie知识点学习
May 06 PHP
PHP html_entity_decode()函数讲解
Feb 25 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
Apr 09 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
Mar 26 PHP
tp5框架前台无限极导航菜单类实现方法分析
Mar 29 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保存任意网络图片到服务器的方法
2015/04/14 PHP
原生javascript实现图片轮播效果代码
2010/09/03 Javascript
jQuery使用动态渲染表单功能完成ajax文件下载
2013/01/15 Javascript
javascript中字符串的定义示例代码
2013/12/19 Javascript
setInterval计时器不准的问题解决方法
2014/05/08 Javascript
Javascript技术栈中的四种依赖注入详解
2016/02/23 Javascript
jQuery中get方法用法分析
2016/12/07 Javascript
微信小程序 点击控件后选中其它反选实例详解
2017/02/21 Javascript
Bootstrap栅格系统简单实现代码
2017/03/06 Javascript
JS字符串长度判断,超出进行自动截取的实例(支持中文)
2017/03/06 Javascript
微信小程序实现瀑布流布局与无限加载的方法详解
2017/05/12 Javascript
Bootstrap栅格系统的使用详解
2017/10/30 Javascript
如何快速解决JS或Jquery ajax异步跨域的问题
2018/01/08 jQuery
实例详解Node.js 函数
2018/06/10 Javascript
JS实现快递单打印功能【推荐】
2018/06/21 Javascript
Angular动画实现的2种方式以及添加购物车动画实例代码
2018/08/09 Javascript
jQuery中$原理实例分析
2018/08/13 jQuery
Node在Controller层进行数据校验的过程详解
2020/08/28 Javascript
[01:16:13]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第一场 2月22日
2021/03/11 DOTA
python实现在pickling的时候压缩的方法
2014/09/25 Python
浅谈编码,解码,乱码的问题
2016/12/30 Python
pygame游戏之旅 游戏中添加显示文字
2018/11/20 Python
Django REST framework视图的用法
2019/01/16 Python
python实现画五角星和螺旋线的示例
2019/01/20 Python
django fernet fields字段加密实践详解
2019/08/12 Python
Python二次规划和线性规划使用实例
2019/12/09 Python
SKECHERS官方旗舰店:美国舒适运动休闲品牌
2017/12/22 全球购物
美国值得信赖的婚恋交友网站:eHarmony
2018/10/04 全球购物
阿迪达斯香港官网:adidas香港
2019/11/09 全球购物
小学英语教学反思案例
2014/02/04 职场文书
测试工程师程序员求职信范文
2014/02/20 职场文书
党的群众路线教育实践活动专题组织生活会发言材料
2014/10/17 职场文书
2014幼儿园教育教学工作总结
2014/12/17 职场文书
一篇文章搞懂python混乱的切换操作与优雅的推导式
2021/08/23 Python
PHP中国际化的字符串排序和比较对象详解
2021/08/23 PHP
Python matplotlib可视化之绘制韦恩图
2022/02/24 Python