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 相关文章推荐
怎么样可以把 phpinfo()屏蔽掉?
Nov 24 PHP
php 常用类整理
Dec 23 PHP
使用PHP计算两个路径的相对路径
Jun 14 PHP
PHP中4个加速、缓存扩展的区别和选用建议
Mar 12 PHP
ThinkPHP模板范围判断输出In标签与Range标签用法详解
Jun 30 PHP
Yii框架关联查询with用法分析
Dec 02 PHP
memcache一致性hash的php实现方法
Mar 05 PHP
php中ob函数缓冲机制深入理解
Aug 03 PHP
PHP中array_keys和array_unique函数源码的分析
Feb 26 PHP
PHP对称加密函数实现数据的加密解密
Oct 27 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
Oct 01 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
Oct 28 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维护文件系统
2006/10/09 PHP
PHP数据库开发知多少
2006/10/09 PHP
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
2012/03/05 PHP
PHP的Yii框架的常用日志操作总结
2015/12/08 PHP
如何获取select下拉框的值(option没有及有value属性)
2013/11/08 Javascript
AngularJs html compiler详解及示例代码
2016/09/01 Javascript
Bootstrap分页插件之Bootstrap Paginator实例详解
2016/10/15 Javascript
JS实现双击内容变为可编辑状态
2017/03/03 Javascript
JavaScript 用fetch 实现异步下载文件功能
2017/07/21 Javascript
详解React Native开源时间日期选择器组件(react-native-datetime)
2017/09/13 Javascript
vue 实现在函数中触发路由跳转的示例
2018/09/01 Javascript
微信小程序 swiper 组件遇到的问题及解决方法
2019/05/26 Javascript
JavaScript 判断数据类型的4种方法
2020/09/11 Javascript
[11:27]《一刀刀一天》之DOTA全时刻20:TI4总奖金突破920W TS赛事分析
2014/06/18 DOTA
[00:33]2016完美“圣”典风云人物:Sccc宣传片
2016/12/03 DOTA
浅谈python中的变量默认是什么类型
2016/09/11 Python
深入解答关于Python的11道基本面试题
2017/04/01 Python
python中logging库的使用总结
2017/10/18 Python
python机器学习之决策树分类详解
2017/12/20 Python
对numpy中数组转置的求解以及向量内积计算方法
2018/10/31 Python
Python Datetime模块和Calendar模块用法实例分析
2019/04/15 Python
Python3之手动创建迭代器的实例代码
2019/05/22 Python
python日志logging模块使用方法分析
2019/05/23 Python
快速解决pyqt5窗体关闭后子线程不同时退出的问题
2019/06/19 Python
java中的控制结构(if,循环)详解
2019/06/26 Python
利用Python小工具实现3秒钟将视频转换为音频
2019/10/29 Python
keras-siamese用自己的数据集实现详解
2020/06/10 Python
基于CSS3实现的漂亮Menu菜单效果代码
2015/09/10 HTML / CSS
Chemist Warehouse官方海外旗舰店:澳洲第一连锁大药房
2017/08/25 全球购物
廉价航班、机票和酒店:JustFly
2018/02/07 全球购物
Boden澳大利亚官网:英国在线服装公司
2018/08/05 全球购物
计算机专业毕业生自我鉴定
2014/01/16 职场文书
学校先进集体事迹材料
2014/05/31 职场文书
学校做一个有道德的人活动方案
2014/08/23 职场文书
素质教育培训心得体会
2016/01/19 职场文书
Golang 如何实现函数的任意类型传参
2021/04/29 Golang