php 上传文件并对上传的文件进行简单验证(错误信息,格式(防伪装),大小,是否为http上传)
<body>
<?php
/**
*验证错误
*如果有错,就返回错误,如果没错,就返回null
*/
function check($file) {
//1:验证是否有误
if($file['error']!=0){
switch($file['error']) {
case 1:
return '文件大小超过了php.ini中允许的最大值,最大值是:'.ini_get('upload_max_filesize');
case 2:
return '文件大小超过了表单允许的最大值';
case 3:
return '只有部分文件上传';
case 4:
return '没有文件上传';
case 6:
return '找不到临时文件';
case 7:
return '文件写入失败';
default:
return '未知错误';
}
}
//2、验证格式
//第一步:创建finfo资源
$info=finfo_open(FILEINFO_MIME_TYPE);
//第二步:将finfo资源和文件做比较
$mime=finfo_file($info,$file['tmp_name']);
//第三步,比较是否合法
$allow=array('image/jpeg','image/png','image/gif'); //允许的类别
if(!in_array($mime,$allow)){
return '只能上传'.implode(',',$allow).'格式';
}
//3、验证大小
$size=123456789;
if($file['size']>$size){
return '文件大小不能超过'.number_format($size/1024,1).'K';
}
//4、验证是否是http上传
if(!is_uploaded_file($file['tmp_name']))
return '文件不是HTTP POST上传的<br>'; return null; //没有错误
} //表单提交
if(!empty($_POST)) {
//上传文件过程中有错误就显示错误
if($error=check($_FILES['face'])){
echo $error;
}else{
//文件上传,上传的文件保存到当天的文件夹中
$foldername=date('Y-m-d'); //文件夹名称
$folderpath="./uploads/{$foldername}"; //文件夹路径
if(!is_dir($folderpath))
mkdir($folderpath);
$filename=uniqid('',true).strrchr($_FILES['face']['name'],'.'); //文件名
$filepath="$folderpath/$filename"; //文件路径
if(move_uploaded_file($_FILES['face']['tmp_name'],$filepath))
echo "上传成功,路径是:{$foldername}/{$filename}";
else
echo '上传失败<br>';
} }
?>
<form method="post" action="" enctype='multipart/form-data'>
<input type="file" name="face">
<input type="submit" name="button" value="上传">
</form>
</body>
运行结果
防治文件伪装需要在php.ini中开启fileinfo.dll扩展,开启fileinfo扩展以后,就可以使用finfo_*的函数。
php 上传文件并对上传的文件进行简单验证(错误信息,格式(防伪装),大小,是否为http上传)的更多相关文章
- Linux bash 中,如何将正常信息和错误信息输出到文件
问题描述: $ command 2>> error $ command 1>> output 是否有方法,在bash同一行,实现输出stderr到error文件,输出stdou ...
- .NET跨平台:在Mac上跟着错误信息一步一步手写ASP.NET 5程序
今天坐高铁时尝试了一种学习ASP.NET 5的笨方法,从空文件夹开始,根据运行dnx . kestrel命令的错误信息,一步一步写代码,直至将一个最简单的ASP.NET程序运行起来. 尝试的具体步骤如 ...
- Struts2文件上传(基于表单的文件上传)
•Commons-FileUpload组件 –Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件上传的子项目 •Commons-Fil ...
- php如何上传txt文件,并且读取txt文件
1.创建目录如下
- Loadrunner上传文件解决办法(大文件)
Loadrunner上传文件解决办法(大文件) 最近再做一个跟海量存储相关的项目测试,需要通过LR模拟用户大量上传和下载文件,请求是Rest或Soap,同时还要模拟多种大小尺寸不一的文件 通常情况下, ...
- WEB安全第二篇--用文件搞定服务器:任意文件上传、文件包含与任意目录文件遍历
零.前言 最近做专心web安全有一段时间了,但是目测后面的活会有些复杂,涉及到更多的中间件.底层安全.漏洞研究与安全建设等越来越复杂的东东,所以在这里想写一个系列关于web安全基础以及一些讨巧的pay ...
- 文件上传之——用SWF插件实现文件异步上传和头像截取
之前写过几篇文件上传,那些都不错.今天小编带领大家体会一种新的上传方法,及使用Flash插件实现文件上传. 使用Flash的好处就是可以解决浏览器兼容性问题.之前我写的一个快捷复制功能也是利用的Fla ...
- PHP 图片上传工具类(支持多文件上传)
====================ImageUploadTool======================== <?php class ImageUploadTool { private ...
- 文件上传---普通文件fileupload.jar和url文件httpUrlConnection
文件上传---普通文件和url文件 主要用来学习使用common-fileupload.jar和java.net.httpURLConnection 普通文件: //上传xls文件到临时目录 if ( ...
随机推荐
- 【Leetcode链表】移除链表元素(203)
题目 删除链表中等于给定值 val 的所有节点. 示例: 输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3-&g ...
- css技巧:清除浮动
1.常用方法——overflow 给浮动元素的容器添加overflow:hidden;或overflow:auto;可以清除浮动,另外在 IE6 中还需要触发 hasLayout ,例如为父元素设置容 ...
- HZOJ 毛一琛
直接暴搜是$3^n$的,无法接受. 正解是$meet \ in \ the \ middle$,暴搜前n/2个数,每个数的状态有三种:都不选,选为A集合,选为B集合.那么我们可以维护两个集合的差. 设 ...
- 巨蟒python全栈开发-第11阶段 ansible_project1
今日大纲: 1.前端页面介绍 2.发布流程 3.需求分析 4.表结构设计 5.前端页面设计 昨日内容回顾: 1.roles - tasks - handlers - files - templates ...
- iOS 9适配系列教程:后台定位
http://www.cocoachina.com/ios/20150624/12200.html Demo:GitHub地址 [iOS9在定位的问题上,有一个坏消息一个好消息]坏消息:如果不适配iO ...
- CNN输出维度的计算
在 CNN 的一层中的 patch 中共享权重 w ,无论猫在图片的哪个位置都可以找到. 当我们试图识别一个猫的图片的时候,我们并不在意猫出现在哪个位置.无论是左上角,右下角,它在你眼里都是一只猫 ...
- USDT钱包安装
安装USDT钱包 wget https://bintray.com/artifact/download/omni/OmniBinaries/omnicore-0.4.0-x86_64-linux-gn ...
- SaltStack之用户账户管理
在Salt.state中,user 模块是用来创建用户和管理用户设定的,用户可以被设置成 present 状态或者 absent 状态 注释: present:添加用户 absent : 删除用户 ...
- 在ThinkPHP中,if标签和比较标签对于变量的比较。
在TP模板语言中.if和eq都可以用于变量的比较. <比较标签 name="变量" value="值">内容</比较标签> 比如: &l ...
- WPF Converter(转)
WPF Binding 用于数据有效性校验的关卡是它的 ValidationRules 属性,用于数据类型转换的关卡是它的 Converter 属性.下面是实例: 1. Binding 的数据校验 & ...