php上传(二)
上传的主体页面
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>Document</title>
</head>
<body>
<form action="doAction.php" method='post' enctype='multipart/form-data'>
请选择头像: <input type="file" name="myFile" id="" /><br/>
<input type="submit" value="上传" />
</form>
</body>
</html>
处理页面 doAction.php
<?php
header('content-type:text/html;charset=utf-8');
//1.接受数据
$fileInfo=$_FILES['myFile'];
$filename=$fileInfo['name'];
$type=$fileInfo['type'];
$tmp_name=$fileInfo['tmp_name'];
$size=$fileInfo['size'];
$error=$fileInfo['error']; //2.判断错误号 if($error>0){
//匹配错误信息
switch($error){
case 1:
$msg='超过了PHP配置文件中upload_max_filesize的值';
break;
case 2:
$msg='超过了MAX_FILE_SIZE选项的值';
break;
case 3:
$msg='文件部分被上传';
break;
case 4:
$msg='没有选择上传文件';
break;
case 6:
case 7:
case 8:
$msg='系统错误';
break;
}
exit($msg);
} //检测上传文件的大小
$maxSize=2097152;//2M 允许上传的最大大小
if($size>$maxSize){
exit('上传文件过大');
} //检测上传文件的类型
$ext=strtolower(pathinfo($filename,PATHINFO_EXTENSION));
$allowExt=array('jpeg','jpg','png','gif');//允许上传文件的扩展名
if(!in_array($ext,$allowExt)){
exit('非法文件类型');
}
//检测是否是真实图片
$flag=true;//默认检测是否是真实图片
if($flag){
if(!getimagesize($tmp_name)){
exit('文件不是真实图片');
}
}
//检测是否是通过HTTP POST方式上传上来的 if(!is_uploaded_file($tmp_name)){
exit('文件不是通过HTTP POST方式上传上来的');
} //开始移动文件
$uploadPath='uploads';
//检测目录是否存在,如果不存在则创建
if(!file_exists($uploadPath)){
//创建目录
mkdir($uploadPath,0777,true);
}
//防止文件重名,生成唯一的文件名
$uniName=md5(uniqid()).'.'.$ext;
$destination=$uploadPath.'/'.$uniName;
if(!@move_uploaded_file($tmp_name, $destination)){
exit('文件移动失败');
}
echo "文件{$filename}上传成功";
另一种写法
<?php
header('content-type:text/html;charset=utf-8');
//在服务器端做限制 $fileInfo=$_FILES['myFile'];
$filename=$fileInfo['name'];
$type=$fileInfo['type'];
$tmp_name=$fileInfo['tmp_name'];
$error=$fileInfo['error'];
$size=$fileInfo['size'];//上传文件的大小
$maxSize=2097152;//字节,允许上传文件的最大值
$allowExt=array('jpeg','jpg','png','gif');//允许上传文件的扩展名
$reUpload="<p><a href='upload.php'>重新上传</a></p>";
//2.判断错误号
if($error==UPLOAD_ERR_OK){
//3.检测上传文件的大小是否符合规范
if($size<=$maxSize){
//4.检测上传文件的扩展名在允许的范围内
//取出上传文件的扩展名
$arr=explode('.',$filename);
$ext=end($arr);
$ext=strtolower($ext);
//echo $ext;
if(in_array($ext,$allowExt)){
//echo '上传成功<br/>';
//5.检测文件是否是通过HTTP POST方式上传上来
//is_uploaded_file($tmp_name):检测服务器端的临时文件
//是否是通过HTTP POST方式上传上来的
if(is_uploaded_file($tmp_name)){
//6.移动文件
if(@move_uploaded_file($tmp_name, "../uploads/".$filename)){
echo '文件上传成功,信息如下:<hr/>';
echo '文件名:'.$filename,'<br/>';
echo '文件大小:'.$size,'<br/>';
echo '文件类型:'.$type,'<br/>';
}else{
die('文件移动失败'.$reUpload);
} }else{
die('文件不是通过HTTP POST方式上传上来的'.$reUpload);
} }else{
die('非法文件类型'.$reUpload);
} }else{
die('上传文件过大<br/>'.$reUpload);
}
}else{
//匹配错误信息
switch($error){
case 1:
$msg='超过了PHP配置文件upload_max_filesize选项的值';
break;
case 2:
$msg='超过了表单的MAX_FILE_SIZE选项的值';
break;
case 3:
$msg='文件部分被上传';
break;
case 4:
$msg='没有选择上传文件';
break;
case 6:
case 7:
case 8:
$msg='系统错误';
break;
}
die($msg); }
上传类
<?php
class Upload{
//把文件保存
function saveFile($toPath="./",$allowType=array('image/png','image/gif','image/jpeg','image/pjpeg'),$allowSize=2000000){
if(!empty($_FILES)){//有文件上传
$reArr=array();
foreach($_FILES['upload']['error'] as $k=>$v){
if($v===0){//文件上传没有出错
//获取类型进行判断
$type=$_FILES['upload']['type'][$k];
if(in_array($type,$allowType)){//类型是否合法
//判断size
$size=$_FILES['upload']['size'][$k];
if($size<=$allowSize){
//转移
$oldName=$_FILES['upload']['name'][$k];
$newName=$this->newName($oldName);
//保存
$re=move_uploaded_file($_FILES['upload']['tmp_name'][$k],$toPath."/".$newName);
if($re){
$reArr[$k]=$newName;
}else{
$reArr[$k]=false;
}
}else{
$reArr[$k]=false;
}
}else{
$reArr[$k]=false;
}
}else{
$reArr[$k]=false;
}
}
return $reArr;
}else{
return false;
}
}
//产生新名称
private function newName($oldName){//a.jpg
$name=md5(uniqid(microtime(),true));
$ext=pathinfo($oldName,PATHINFO_EXTENSION);
return $name.".".$ext;
}
}
php上传(二)的更多相关文章
- 文件上传二:FormData上传
介绍三种上传方式: 文件上传一:伪刷新上传 文件上传二:FormData上传 文件上传三:base64编码上传 Flash的方式也玩过,现在不推荐用了. 真正的异步上传,FormData的更多操作,请 ...
- SpringBoot图片上传(二)
需求简介:做新增的时候,需要上传图片.(⊙o⊙)…这需求描述也太简单了吧,限制文件大小60*60 512kb ,第一次做,记录一下嗷,废话就不啰嗦了 上代码 代码: //html代码<div c ...
- 使用ImageIO.write上传二维码文件时候,提示系统找不到指定路径
报错如图所示: java.io.FileNotFoundException: E:\SF\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtp ...
- ckeditor图片上传二三事
最近实验室要用ckeditor,踩了几个小坑记录下. 1.出现iframe跨域问题 response.setHeader("X-Frame-Options", "SAME ...
- 实战maven私有仓库三部曲之二:上传到私有仓库
在上一章<实战maven私有仓库三部曲之一:搭建和使用>我们搭建了maven私有仓库,并体验了私有仓库缓存jar包的能力,避免了局域网内开发人员去远程中央仓库下载的痛苦等待,本章我们再来体 ...
- Java实现上传下载
一.上传 二.下载 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.Fi ...
- JS实现多附件上传(asp.net)
前几天,用户提出一个需求-多附件上传,另外,每个上传文件要加一个别名,本人创新少,从网上收集了资料,稍微改写,满足了 客户的需求.在应用到程序之前,先做了个小测试,测试通过,小高兴,就记录下了这个小测 ...
- Web---文件上传-用apache的工具处理、打散目录、简单文件上传进度
我们需要先准备好2个apache的类: 上一个博客文章只讲了最简单的入门,现在来开始慢慢加深. 先过渡一下:只上传一个file项 index.jsp: <h2>用apache的工具处理文件 ...
- [原创] linux 下上传 datapoint数据到yeelink 【golang版本】同时上传2个数据点
/* Create by sndnvaps<sndnvaps@gmail.com> * data: 2015-04-12* upload 2 datapoint to yeelink.ne ...
随机推荐
- 【JS学习】慕课网7-23编程练习 有关字符串数组
要求:1.显示打印的日期. 格式为类似“2014年03月21日 星期三” 的当前的时间.2.计算出该班级的平均分(保留整数).同学成绩数据如下:"小明:87; 小花:81; 小红:97; 小 ...
- Collections 工具类常见方法
Collections 工具类常用方法: 排序 查找,替换操作 同步控制(不推荐,需要线程安全的集合类型时请考虑使用 JUC 包下的并发集合) 排序操作 void reverse(List list) ...
- leetcode-162周赛-1254-统计封闭岛屿数量
题目描述: 自己的提交: class Solution: def closedIsland(self, grid: List[List[int]]) -> int: def dfs(grid,r ...
- rem与px的相爱相杀
rem 简介:为元素设定字体大小:相对大小:只相对HTML根元素. 优点:只修改根元素就可以成比例调整所有字体的大小. bug:IE8及更早版本不兼容. hack:多写一个绝对单位px的声明,不兼容版 ...
- A*启发式搜索基础
A*启发式搜索基础 传统的搜索方式是盲目搜索,即到每一步的时候并没有对每种情况进行有效的区分,这样的结果是浪费了大量的时间,对很多没有必要的数据进行了搜索. 而A*算法则在搜索的过程中会选取认为“最优 ...
- 思维构造+匹配——cf1199E
直接枚举每条边,如果边加到图中后还是个匹配图,就直接加,反之就不加 这样加完所有边后,剩下的点必定可以组成一个独立集:因为如果剩下的点中还有互相匹配的,那么这对点应该在加边时就被算到匹配图中 所以要么 ...
- Hbase集群类型|集群配置|服务器选型|磁盘容量规划
HBase和Hadoop的集群类型 1.单机模式 主要用于开发工作,一台机器上运行所有的守护进程,或者一台机器运行多个虚拟机.一般用于评估和测试. 2.小型集群 20台机器以内的集群,不同的机器运行不 ...
- AcWing 139. 回文子串的最大长度 hash打卡
如果一个字符串正着读和倒着读是一样的,则称它是回文的. 给定一个长度为N的字符串S,求他的最长回文子串的长度是多少. 输入格式 输入将包含最多30个测试用例,每个测试用例占一行,以最多1000000个 ...
- flutter 卡在Running Gradle task 'assembleDebug'...
Android项目运行时出错 卡在Initializing gradle… 运行时会卡在Initializing gradle..., 此时因为Android项目会用到Gradle, 如果没有FQ,下 ...
- Linux之mysql-redis-python使用
1. rpm包使用 1. 光盘挂载 mount /dev/cdrom /mnt cd /mnt ls 2. 安装rpm包 rpm -ivh vsftpd-3.0.2-22.el7.x86_64.rpm ...