100)PHP,文件上传总代码整理
首先是我的目录关系:

然后我的html表单代码:

<html>
<head>
<title>Form</title>
<meta
http-equiv="Content-Type" content="text/html;charset=UTF-8">
</head> <body>
<form action="BBB.php" method="post" name="form1" enctype="multipart/form-data" >
<table width="" border="" align="center" cellpadding="" cellspacing="">
<tr>
<td width="">
<div align="right">姓名:</div></td>
<td width="">
<label>
<input name="username" type="text" id="username">
</label>
</td> </tr>
<tr>
<td>
<div align
="right">职业:</div></td>
<td>
<label>
<input name
="job" type="text" id="job">
</label></td>
</tr>
<tr>
<td>
<label>
文件上传:<input type="file" name="picture">
</label>
</td>
</tr>
</table>
<p align="center">
<input type="submit" value="Submit">
</p>
</form>
</body>
</html>
然后是我的BBB.php代码

<?php
/**
* 上传函数
* @param $tmp_file $_FILES的五个信息,比如upload($_FILES('mingzi')
* $_FILES里面的名字是你的对应的html代码中的上传文件的那个name
* @return bool 失败返回false,成功就是true
*/
$tmp_file=$_FILES['picture'];
function upload($tmp_file){ /**
* 是否存在错误
*/ if($tmp_file['error']!=){
echo '文件上传错误';
return false;
}
/**
* 尺寸,
* 这个函数自己定的,但是应该是初始化设定的,就是这个值是变化的,不是一个固定的值。
*/ $max_size=*;//自己设定的最大尺寸
if($tmp_file['size']>$max_size){
echo "文件过大";
return false;
}
/**
* 验证后缀名,
* 用验证后缀和MIME方法
*/
//首先是验证后缀名
$tmp_file_zhui=strrchr($tmp_file['name'],'.') ;
//strrchr函数是来剪切字符串的最后出现.的包括这个.后面的全部截取
//后缀的映射数组,其实就是那个满足条件的后缀表(用关联数组表示)
$tmp_file_zhui_list=array(
'.png','.gif','.jpeg','.jpg'
);
if(!in_array($tmp_file_zhui,$tmp_file_zhui_list)){
echo "文件格式有问题";
return false;
}
//就是那个$_FILES['type']有一个格式,下面的是对应那个映射表
$tmp_file_zhui_MIMElist=array(
'.png'=>array('image/png','image/x-png'),
'.jpg'=>array('image/jpeg','image/x-pjpeg'),
'.jpeg'=>array('image/jpeg','image/pjpeg'),
'.gif'=>array('image/gif'),
);
$old_list=array();//下面直接用$old_list不行,我觉得这个就是声明,这是自己加的
//得出真正的映射表,因为在我的后缀映射表中,可能不是这四个,一旦发生改动,我的下面的映射关系,我还得自己改,所以,我就用一个foreach,上面有什么后缀,我的下面就给他对应上什么$_FILE['type']格式,然后得到我要的MIME映射表
foreach ($tmp_file_zhui_list as $value){
foreach($tmp_file_zhui_MIMElist[$value] as $key=>$item){
// var_dump($tmp_file_zhui_MIMElist[$value][$key]);
$new_MIME_list=array_merge($old_list,(array)$tmp_file_zhui_MIMElist[$value][$key]);
$old_list=$new_MIME_list;
} }
//去重
$new_MIME_list=array_unique($new_MIME_list); //然后用MIME验证
$phpfinfo=new finfo(FILEINFO_MIME_TYPE);
$f_type=$phpfinfo->file($tmp_file['tmp_name']);
echo $f_type;
if(!in_array($f_type,$new_MIME_list)){
echo "文件格式有误";
return false;
}
//后缀验证完成。
//建立一个文件夹,来存我的临时文件
if(!is_dir('./wangchao')){
mkdir('./wangchao');
} $sub_dir_name=date('Y--m-d-H');//截取年月日小时
//unipid是产生一个随机名字,可以试验一下 echo uniqid();
move_uploaded_file($tmp_file['tmp_name'],'./wangchao/'.uniqid('wang_'.$sub_dir_name.'_').$tmp_file_zhui);
return true;
}
upload($tmp_file);
100)PHP,文件上传总代码整理的更多相关文章
- WebLogic 任意文件上传远程代码执行_CVE-2018-2894漏洞复现
WebLogic 任意文件上传远程代码执行_CVE-2018-2894漏洞复现 一.漏洞描述 Weblogic管理端未授权的两个页面存在任意上传getshell漏洞,可直接获取权限.Oracle 7月 ...
- php课程---文件操作及文件上传的代码总结
php里面文件包含目录和文件两种 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h ...
- Rxjava+Retrofit2+Okhttp3多文件上传(服务器端代码+客户端代码)
所有代码亲测可用,如有问题,欢迎指正. 首先在ApiService接口文件中新建文件上传接口 public interface ApiService { static final String BAS ...
- js 实现 input type="file" 文件上传示例代码
在开发中,文件上传必不可少但是它长得又丑.浏览的字样不能换,一般会让其隐藏点其他的标签(图片等)来时实现选择文件上传功能 在开发中,文件上传必不可少,<input type="file ...
- selenium之 文件上传所有方法整理总结【转】
本文转自:https://blog.csdn.net/huilan_same/article/details/52439546 文件上传是所有UI自动化测试都要面对的一个头疼问题,今天博主在这里给大家 ...
- WebLogic 任意文件上传 远程代码执行漏洞 (CVE-2018-2894)------->>>任意文件上传检测POC
前言: Oracle官方发布了7月份的关键补丁更新CPU(Critical Patch Update),其中针对可造成远程代码执行的高危漏洞 CVE-2018-2894 进行修复: http://ww ...
- selenium之 文件上传所有方法整理总结
本文转载“灰蓝”的原创博客.http://blog.csdn.net/huilan_same/article/details/52439546 文件上传是所有UI自动化测试都要面对的一个头疼问题,今天 ...
- JSCH实现文件上传的代码实例
package com.vcredit.ddcash.monitor.sendmail; import java.io.File;import java.io.FileInputStream;impo ...
- php之文件上传类代码
/* 单个文件上传 功能 上传文件 配置允许的后缀 配置允许的大小 获取文件后缀 判断文件的后缀 报错 */ class UpTool{ protected $allowExt = 'jpg,jpeg ...
随机推荐
- php对象: __clone, __toString, __call,__isset, __unset, __sleep, __wakeup,
__clone: 克隆对象,自动完成操作 clone() __toString: return返回字符串 __call: 当调用不存在的函数时,自动执行该方法,并返回相关值 __isset: ...
- vSphere 6.7 新特性 — 基于虚拟化的安全 (VBS)
https://blogs.vmware.com/china/2018/07/27/vsphere-6-7-%E6%96%B0%E7%89%B9%E6%80%A7-%E5%9F%BA%E4%BA%8E ...
- 定时任务莫名停止,Spring 定时任务存在 Bug?
专注于Java领域优质,技术欢迎关注 作者: 鸭血粉丝 来自:Java极客技术 Hello~各位读者新年好,我是鸭血粉丝(大家可以称呼我为「阿粉」).这里阿粉给大家拜个年,祝大家蒸蒸日上烫烫烫,年年有 ...
- awk中传参方式
结合编辑数据文件的shell脚本学习awk传参方式,该脚本功能: a.取VIDEOUSR_11082017_0102_ONLINE_STASTIC.dat文件中第87个字段的低8位: b.将每行数据的 ...
- JAVA调用FFMpeg进行转码等操作
直接上代码: public abstract class FFmpegUtils { FFmpegUtils ffmpegUtils; ; String timeLength = "&quo ...
- Dynamics CRM - 在 Dynamics CRM 开发中创建一个 Entity 对象
在 Dynamics CRM 的开发中,我们时不时需要创建 Entity 对象,而对于如何创建 Entity 对象,在 C# plugin 和 JS 的写法存在些许差异. 一.C# Plugin 创建 ...
- c# 多线程——入门学习
1. 概念介绍 1.1 线程 线程是操作系统能够进行运算调度的最小单位,包含在进程之中,是进程中的实际运作单位.一条线程指的时进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不 ...
- AIOps对监控报警架构的挑战
负责百度智能运维(Noah)监控报警系统.通告平台:在精准报警.精准通告.报警收敛.公/私有云监控等方向具有广泛的实践经验. 干货概览 监控报警是故障发现的重要一环,也是百度在AIOps的最早切入 ...
- MyBatis从入门到精通(第4章):MyBatis动态SQL【foreach、bind、OGNL用法】
(第4章):MyBatis动态SQL[foreach.bind.OGNL用法] 4.4 foreach 用法 SQL 语句中有时会使用 IN 关键字,例如 id in (1,2,3).可以使用 ${i ...
- JavaSE--Comparator 和 Comparable 区别
public interface Comparable<T> 此接口强行对实现它的每个类的对象进行整体排序.这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法 ...