文件上传是php项目中经常遇到下,下面具体讲下文件上传功能。
HTML页面:(form 的 enctype="multipart/form-data" 这个属性不能少)
<!DOCTYPE html>
<html>
<head lang="zh-CN">
<meta charset="UTF-8">
<title>上传表单</title>
<style type="text/css">
button {
width: 150px;
height: 60px;
border: 1px solid #008800;
border-radius: 15px 50px;
background: #006600;
font-size: 16px;
color: #fff;
cursor: pointer;
}
button:focus {
outline: none;
}
button:active {
background: #008800;
}
</style>
</head>
<body>
<form action="handle.php" method="post" enctype="multipart/form-data">
<input type="file" name="file"/>
<button type="button">上传</button>
</form>
<script type="text/javascript">
// 上传验证
var submit = document.querySelector('button');
submit.addEventListener('click', function() {
if(document.forms[0].file.value == '') {
alert('没有选择上传文件!');
} else {
document.forms[0].submit();
}
}, false);
</script>
</body>
</html>
不懂的可能会这样实现:(只是一个简单的$_POST获取提交的内容而已,不可取)
header('Content-type: text/html;charset="utf-8"');
if($_POST) {
// 定义文件上传类型
$fileType = array('jpeg', 'png', 'bmp', 'gif', 'jpg');
// 上传文件的后缀 end() 获取数组中的最后一个元素
$suffix = end(explode('.', $_POST['file']));
// 判断上传文件的后缀是否在规定的数组内
if(in_array($suffix, $fileType)) {
echo '上传的文件是:'.$_POST['file'].'<br>';
} else {
echo '上传的图片格式不正确,只支持jpeg png bmp gif jpg的图片格式,2秒后返回提交页面……';
echo '<script>setTimeout(function() {window.location.href="http://localhost/feiyou/fileUpload/form.html"}, 2000);</script>';
}
} else {
echo '没有权限访问此页面,2秒后返回提交页面……';
echo '<script>setTimeout(function() {window.location.href="http://localhost/feiyou/fileUpload/form.html"}, 2000);</script>';
}
实际上php中有个全局数组 $_FILES,专门实现文件上传用的,可以这样实现
header('Content-type: text/html;charset="utf-8"');
if(!empty($_FILES['file'])) {
if($_FILES['file']['error'] > 0) {
echo '上传出错,2秒后,返回提交页面!'.$_FILES['file']['error'];
echo '<script>setTimeout(function() {window.location.href="http://localhost/feiyou/fileUpload/form.html";}, 2000)</script>';
}
// 预定义上传文件类型
$fileType = array('image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'image/bmp');
if(in_array($_FILES['file']['type'], $fileType)) {
echo '你上传的文件是:'.$_FILES['file']['name'];
} else {
echo '上传类型有误,2秒后,返回提交页面!'.$_FILES['file']['type'];
echo '<script>setTimeout(function() {window.location.href="http://localhost/feiyou/fileUpload/form.html";}, 2000)</script>';
}
} else {
echo '没有权限访问此页面,2秒后,返回提交页面!';
echo '<script>setTimeout(function() {window.location.href="http://localhost/feiyou/fileUpload/form.html";}, 2000)</script>';
}
进一步实现上传文件保存
header('Content-type: text/html;charset="utf-8"');
if(!empty($_FILES['file'])) {
if($_FILES['file']['error'] > 0) {
echo '上传出错,2秒后,返回提交页面!'.$_FILES['file']['error'];
echo '<script>setTimeout(function() {window.location.href="http://localhost/feiyou/fileUpload/form.html";}, 2000)</script>';
}
// 预定义上传文件类型
$fileType = array('image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'image/bmp');
if(in_array($_FILES['file']['type'], $fileType)) {
if(file_exists('upload/'.$_FILES['file']['name'])) {
echo $_FILES['file']['name'].'已经存在!';
} else {
// 建立目录
mkdir('upload/');
// 移动上传文件
move_uploaded_file($_FILES['file']['tmp_name'], 'upload/'.$_FILES['file']['name']);
echo '你上传的文件是:<br><img src="upload/'.$_FILES['file']['name'].'">';
}
} else {
echo '上传类型有误,2秒后,返回提交页面!'.$_FILES['file']['type'];
echo '<script>setTimeout(function() {window.location.href="http://localhost/feiyou/fileUpload/form.html";}, 2000)</script>';
}
} else {
echo '没有权限访问此页面,2秒后,返回提交页面!';
echo '<script>setTimeout(function() {window.location.href="http://localhost/feiyou/fileUpload/form.html";}, 2000)</script>';
}
安全之判断上传文件是不是图片
function isImage($filename){
$types = '.gif|.jpeg|.png|.bmp';//定义检查的图片类型
if(file_exists($filename)){
$info = getimagesize($filename);
$ext = image_type_to_extension($info['2']);
return stripos($types,$ext);
}else{
return false;
}
}
if(isImage('test.jpg')!==false){
echo '是图片';
}else{
echo '不是';
}
getimagesize()
函数可用来取得 GIF、JPEG 及 PNG 三种 WWW 上图片的高与宽,不需要安装 GD library 就可以使用本函数。返回的数组有四个元素。返回数组的第一个元素 (索引值 0) 是图片的高度,单位是像素 (pixel)。第二个元素 (索引值 1) 是图片的宽度。第三个元素 (索引值 2) 是图片的文件格式,其值 1 为 GIF 格式、 2 为 JPEG/JPG 格式、3 为 PNG 格式。第四个元素 (索引值 3) 为图片的高与宽字符串,height=xxx width=yyy。可省略的参数 imageinfo 用来取得一些图片的相关信息
欢迎关注技术开发分享录:http://fenxianglu.cn/