上传文件步骤:
- 1、判断是否有选择图片或者判断文件名是否为空
- 2、设置参数允许上传的文件类型、存放图片的文件名、获取文件参数等
- 3、判断图片上传是否有错误
- 4、判断文件是否符合文件类型
- 5、判断上传文件的大小是否超过预设大小
- 6、检测存放图片文件夹是否存在,不存在就创建
- 7、设置新的文件名
- 8、判断文件是否是由POST方法提交,并将临时文件移动到磁盘
index.php
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
<h3>图片上传</h3>
<input type="file" name="image">
<button>上传</button>
</form>
</body>
</html>
upload.php
代码:
<?php
// 1、判断是否有选择图片
if (!isset($_FILES['image']) || empty($_FILES['image']['name'])) {
echo '<script>alert("请选择图片");location.assign("index.php")</script>';
exit;
}
// 2、设置所有参数
$files = $_FILES['image'];
$fileName = $files['name'];
$tempFile = $files['tmp_name'];
$fileSize = $files['size'];
$errorCode = $files['error'];
$fileType = ['jpg', 'jpeg', 'png', 'gif'];
$uploads = 'uploads';
// 3、判断图片是否上传成功
if ($errorCode > 0) {
switch ($errorCode) {
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('文件写入失败');
default:
die('未知错误');
}
}
// 4、判断文件是否是被允许上传的类型
$extension = explode('.', $fileName)[1];
if (!in_array($extension, $fileType)) {
echo "<script>alert('不允许上传该类型文件');history.go(-1);</script>";
exit();
}
// 5、判断文件大小是否超过设置的最大上传限制
$allowSize = 1024*1024*2;
if ($fileSize > $allowSize){
echo "<script>alert('文件大小不能超过2M');history.go(-1);</script>";
exit();
}
// 6、检测存放图片的文件是否存在
if (!file_exists($uploads)) {
mkdir($uploads);
}
// 7、设置新文件名,避免文件重名
$newFile = date('YmdHis', time()) . md5(mt_rand(10, 100)) . '.' . $extension;
$path = __DIR__ . DIRECTORY_SEPARATOR . $uploads . DIRECTORY_SEPARATOR . $newFile;
// 8、判断文件是否上传成功,并将文件从临时路径移动到磁盘
if (is_uploaded_file($tempFile)){
if (move_uploaded_file($tempFile, $path)){
echo '<script>alert("文件上传成功!");history.back();</script>';
}else{
die('文件无法移动到指定目录,请检查目录权限');
}
}else{
die('非法操作');
}
代码效果:
课程总结:
- 1、文件上传,即满足预设的条件参数,文件会先上传到临时文件地址,然后再将临时文件移动到磁盘的过程。
- 2、
history.go(-1)
表示后退,history.go(-1)
表示后退+刷新
THE END !