客户端代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>文件上传</title>
</head>
<body>
<form action="test3.php" method="post" enctype="multipart/form-data">
<!-- 文件最大尺寸限制 -->
<input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
文件:<input type="file" name="me" />
<input type="submit" />
</form>
</body>
</html>
服务端代码如下:
<?php
//PHP上传
//客户端form method必须设置为post enctype必须设置为multipart/form-data
//服务器php.ini相关选项
//file_uploads 默认值 ON 打开文件上传
//post_max_size 默认值 8M 限制通过POST可以接受的最大值
//upload_max_filesize 默认值 2M 限制上传的文件大小 此值必须小于post_max_size
//upload_tmp_dir 默认值 null 上传文件存放的临时路径
//全局数组$_FILES说明
//$_FILES['me']['name'] 客户端文件的原名称,包含扩展名
//$_FILES['me']['size'] 已上传文件的大小,单位为字节
//$_FILES['me']['tmp_name'] 文件被上传后,在服务器存储的临时文件名
//$_FILES['me']['type'] 文件的MIME类型
//$_FILES['me']['error'] 错误码 0没有错误发生,文件上传成功 1上传的文件大小超过了upload_max_filesize的值
// 2文件大小超过了HTML表单中MAX_FILE_SIZE的值 3文件只有部分被上传 4没有文件被上传
// 6找不到临时文件夹 7文件写入失败
//相关函数
//bool is_uploaded_file(string $filename); 该函数检查文件是否是通过HTTP POST上传的
//bool move_uploaded_file(string $src, string $des); 该函数检查文件合法后再移动文件
$allowtype = ['jpg', 'png', 'gif', 'bmp']; //允许上传的文件类型
$size = 1000000; //最大文件大小
$path = './test'; //文件保存目录
if($_FILES['me']['error'] > 0){
echo '上传错误: ';
switch($_FILES['me']['error']){
case 1: die('上传的文件大小超过了upload_max_filesize的值');
case 2: die('文件大小超过了HTML表单中MAX_FILE_SIZE的值');
case 3: die('文件只有部分被上传');
case 4: die('没有文件被上传');
case 6: die('找不到临时文件夹 ');
case 7: die('文件写入失败');
}
}
if($_FILES['me']['size'] > $size){
die('文件大小超过了'.$size.'字节');
}
$suffix = substr($_FILES['me']['name'], strrpos($_FILES['me']['name'], '.')+1);
if(!in_array($suffix, $allowtype)){
die('文件类型'.$suffix.'不被允许! 仅允许'.implode(',',$allowtype));
}
if(!file_exists($path)) mkdir($path);
$filename = $path.'/'.date('YmdHis').rand(100,999).'.'.$suffix;
if(is_uploaded_file($_FILES['me']['tmp_name'])){
if(!move_uploaded_file($_FILES['me']['tmp_name'], $filename)){
die('不能将文件移动到指定目录');
}
}else{
die('文件'.$_FILES['me']['tmp_name'].'不是一个合法文件');
}
echo '文件'.basename($filename).'上传成功';