最简单的图片上传

0,先了解一下enctype

application/x-www-form-urlencoded 在发送前编码所有字符(默认)
multipart/form-data 不对字符编码。
在使用包含文件上传控件的表单时,必须使用该值。
text/plain 空格转换为 “+” 加号,但不对特殊字符编码。

1,index.html

<!DOCTYPE html>
<html lang="zh-cmn-Hans">
<head>
	<meta charset="UTF-8">
	<title>最简单的图片上传demo</title>
</head>
<body>
	<form action="./upload.active.php" enctype="multipart/form-data" method="post">
		<input type="file" name="file">
		<input type="submit" value="提交">
	</form>
</body>
</html>

upload.active.php

<?php
$fileInfo = $_FILES['file'];

echo "<pre>";
print_r($fileInfo);
echo "</pre>";

立即查看

2,php页面增加过滤(注意:文件的拥有者php-fpm或者文件夹权限777)

<?php 

$fileInfo = $_FILES['file'];

$ext = pathinfo($fileInfo['name'],PATHINFO_EXTENSION);

$allowExt = array('jpg','png','gif','jpeg');

// 1,判断错误号
if($fileInfo['error']>0){
	exit('有错误');
}

// 2,是检查文件后缀
if(!in_array($ext, $allowExt)){
	exit('非法文件类型');
}
// 3,检测文件大小
$maxSize = 10*1024*1024; //10M
if($fileInfo['size']>$maxSize){
	exit('上传文件过大');
}

// 4检查文件类型
$flag = true;
if($flag){
	if(!getimagesize($fileInfo['tmp_name'])){
		exit('不是图片类型');
	}
}
// 5,检测是否通过http post提交
if(!is_uploaded_file($fileInfo['tmp_name'])){
	exit('文件不是通过HTTP POST提交');
}
// 6,判断是否移动成功
// $day = 
$uploadPath = './images';
if(!file_exists($uploadPath)){
	mkdir($uploadPath,0777,true);
	chmod($uploadPath,0777);
}

// 随机一个图片的名字
$uniName = md5(uniqid(microtime(true),true)).'.'.$ext;

$destination = $uploadPath.'/'.$uniName;
if(!@move_uploaded_file($fileInfo['tmp_name'], $destination)){
	exit('文件移动失败');
}

echo '<a href="'.$destination.'">'.$destination.'</a>';

立即查看

评论

发表回复