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 相关文章推荐
mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
Jan 15 PHP
PHP中用正则表达式清除字符串的空白
Jan 17 PHP
PHP源代码数组统计count分析
Aug 02 PHP
Yii PHP Framework实用入门教程(详细介绍)
Jun 18 PHP
PHP函数http_build_query使用详解
Aug 20 PHP
php实现的Cookies操作类实例
Sep 24 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
Dec 25 PHP
Symfony2函数用法实例分析
Mar 18 PHP
Yii框架组件和事件行为管理详解
May 20 PHP
thinkPHP交易详情查询功能详解
Dec 02 PHP
jQuery ajax+PHP实现的级联下拉列表框功能示例
Feb 12 PHP
Laravel框架集成UEditor编辑器的方法图文与实例详解
Apr 17 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
Protoss魔法科技
2020/03/14 星际争霸
《DOTA3》开发工作已经开始 《DOTA3》将代替《DOTA2》
2021/03/06 DOTA
PHP新手入门学习方法
2011/05/08 PHP
浅谈php数组array_change_key_case() 函数和array_chunk()函数
2016/10/22 PHP
Thinkphp 框架配置操作之动态配置、扩展配置及批量配置实例分析
2020/05/15 PHP
XHTML-Strict 内允许出现的标签
2006/12/11 Javascript
jQuery 美元符冲突的解决方法
2010/03/28 Javascript
JSQL SQLProxy 的 php 版本代码
2010/05/05 Javascript
location.href语句与火狐不兼容的问题
2010/07/04 Javascript
extjs 3.31 TreeGrid实现静态页面加载json到TreeGrid里面
2013/04/02 Javascript
javascript之typeof、instanceof操作符使用探讨
2013/05/19 Javascript
Javascript基础 函数“重载” 详细介绍
2013/10/25 Javascript
jquery日历控件实现方法分享
2014/03/07 Javascript
微信公众号 客服接口的开发实例详解
2016/09/28 Javascript
Vue.js自定义指令的用法与实例解析
2017/01/18 Javascript
JavaScript中双符号的运算详解
2017/03/12 Javascript
jQuery 添加样式属性的优先级别方法(推荐)
2017/06/08 jQuery
简单谈谈js的数据类型
2017/09/25 Javascript
详解自定义ajax支持跨域组件封装
2018/02/08 Javascript
解决iView中时间控件选择的时间总是少一天的问题
2018/03/15 Javascript
Vue组件中的data必须是一个function的原因浅析
2018/09/03 Javascript
jQuery弹框插件使用方法详解
2020/05/26 jQuery
Vue如何跨组件传递Slot的实现
2020/12/14 Vue.js
浅析Python 中整型对象存储的位置
2016/05/16 Python
python语言使用技巧分享
2016/05/31 Python
Python安装图文教程 Pycharm安装教程
2018/03/27 Python
selenium 安装与chromedriver安装的方法步骤
2019/06/12 Python
详解PyCharm安装MicroPython插件的教程
2019/06/24 Python
python并发爬虫实用工具tomorrow实用解析
2019/09/25 Python
Python数据可视化:幂律分布实例详解
2019/12/07 Python
世界上最大的隐形眼镜商店:1-800 Contacts
2018/11/03 全球购物
会计毕业生自荐信
2013/11/21 职场文书
父母寄语大全
2014/04/12 职场文书
人事任命书怎么写
2014/06/05 职场文书
企业仓管员岗位职责
2014/06/15 职场文书
2014领导班子四风问题查摆思想汇报
2014/09/13 职场文书