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 相关文章推荐
关于文本留言本的分页代码
Oct 09 PHP
用php过滤危险html代码的函数
Jul 22 PHP
php常用Stream函数集介绍
Jun 24 PHP
php实现将字符串按照指定距离进行分割的方法
Mar 14 PHP
调试WordPress中定时任务的相关PHP脚本示例
Dec 10 PHP
php 在字符串指定位置插入新字符的简单实现
Jun 28 PHP
PHP简单判断手机设备的方法
Aug 23 PHP
php基于curl实现的股票信息查询类实例
Nov 11 PHP
PHP中Laravel 关联查询返回错误id的解决方法
Apr 01 PHP
php读取XML的常见方法实例总结
Apr 25 PHP
Laravel 中使用简单的方法跟踪用户是否在线(推荐)
Oct 30 PHP
php7 新增功能实例总结
May 25 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
虹吸壶煮咖啡26个注意事项
2021/03/03 冲泡冲煮
Win9x/ME下Apache+PHP安装配置
2006/10/09 PHP
php学习笔记之 函数声明(二)
2011/06/09 PHP
WordPress中查询文章的循环Loop结构及用法分析
2015/12/17 PHP
PHP实现的浏览器检查类
2016/04/11 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
2016/07/13 PHP
利用PHP生成CSV文件简单示例
2016/12/21 PHP
动态创建的表格单元格中的事件实现代码
2008/12/30 Javascript
js tab效果的实现代码
2009/12/26 Javascript
jQuery实现用方向键控制层的上下左右移动
2013/01/13 Javascript
js中parseInt函数浅谈
2013/07/31 Javascript
jQuery搜索子元素的方法
2015/02/10 Javascript
jQuery插件slick实现响应式移动端幻灯片图片切换特效
2015/04/12 Javascript
使用JavaScript实现弹出层效果的简单实例
2016/05/31 Javascript
JavaScript中的冒泡排序法
2016/08/03 Javascript
javascript 四十条常用技巧大全
2016/09/09 Javascript
angular+ionic 的app上拉加载更新数据实现方法
2017/01/16 Javascript
JS实现预加载视频音频/视频获取截图(返回canvas截图)
2017/10/09 Javascript
angular4实现tab栏切换的方法示例
2017/10/21 Javascript
js中时间格式化的几种方法
2018/07/22 Javascript
Vue.js组件props数据验证实现详解
2019/10/19 Javascript
使用Vue实现一个树组件的示例
2020/11/06 Javascript
原生JS实现音乐播放器的示例代码
2021/02/25 Javascript
linux系统使用python监测网络接口获取网络的输入输出
2014/01/15 Python
python enumerate函数的使用方法总结
2017/11/15 Python
Python通过Pygame绘制移动的矩形实例代码
2018/01/03 Python
django 发送邮件和缓存的实现代码
2018/07/18 Python
python 双循环遍历list 变量判断代码
2020/05/04 Python
详解Pycharm安装及Django安装配置指南
2020/09/15 Python
工程业务员岗位职责
2013/12/31 职场文书
单位接收证明格式
2015/06/18 职场文书
呼啸山庄读书笔记
2015/06/29 职场文书
营销策划分析:怎么策划才能更好销量产品?
2019/09/04 职场文书
python requests模块的使用示例
2021/04/07 Python
Navicat for MySQL的使用教程详解
2021/05/27 MySQL
Python通用验证码识别OCR库ddddocr的安装使用教程
2022/07/07 Python