1 写一个文件操作案例
前端页面:index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件操作</title>
</head>
<body>
<h2>文件上传</h2>
<form action="file.php" method="post" enctype="multipart/form-data">
<!--name:最终会成为php中$_FILES['my_file']-->
<input type="file" name="my_file">
<!--人为设置上传文件大小-->
<input type="hidden" name="max_file_size" value="2097152">
<button>上传</button>
</form>
</body>
</html>
后端处理:file.php
# 前端文件大小设置
if( !empty($_POST['max_file_size']) ){
$fileSize0 = intval($_POST['max_file_size']);
}
else{
$fileSize0 = 0;
}
# 1 配置上传参数
$fileType = ['jpg', 'png', 'gif']; # 文件类型限制
$fileSize = 1048576; # 后端文件大小限制
$filePath = '/uploads/'; #文件上传目录
$fileName = $_FILES['my_file']['name']; # 原始文件名
$tempFile= $_FILES['my_file']['tmp_name']; # 临时文件名
# 2 判断是否上传成功,大于0说明有错误
$uploadError = $_FILES['my_file']['error'];
# 人为设置文件大小错误 ,
# 对于$uploadError,1是超过php上传文件大小,2是超过表单上传文件大小,默认一般不超,除非先将这些设置改小
# 先判断前端大小是否超,再判断后端
if( $fileSize0 && $_FILES['my_file']['size'] > $fileSize0 ) $uploadError = 2;
elseif( $_FILES['my_file']['size'] > $fileSize ) $uploadError = 1;
if( $uploadError > 0 ){
switch( $uploadError ){
case 1: die('上传文件过大,超过php上传文件大小');
case 2: die('上传文件过大,超过表单上传文件大小');
case 3: die('文件上传不完整');
case 4: die('请选择上传文件');
default: die('未知错误');
}
}
# 3 判断文件扩展名是否支持
$extension = explode('.', $fileName)[1];
if( !in_array($extension, $fileType) ){
die( '<script>alert("'.$extension.'文件类型不支持上传");location.assign("index.html")</script>' );
}
# 4 生成不可重复的临时文件名
$fileName = date( 'YmdHis', time() ) . md5( mt_rand(1,99) ) . '.' . $extension;
# 5 文件上传
if( is_uploaded_file($tempFile) ){
# 将文件移到指定上传目录
if( move_uploaded_file($tempFile, __DIR__ . $filePath . $fileName) ){
echo "上传成功";
}
else{
die('上传目录是否存在 / 上传目录是否够权限');
}
}
else{
die('非法操作');
}
exit;
运行
示例1
示例2
示例3
示例4
示例5
小结:
1)设置文件类型限制,php端文件大小限制,文件目录,
2)获取数据,两个参数,一个表单端文件大小限制,一个 $_FILES[‘my_file’]
3)判断error: 是否没传文件, 是否文件过大, 是否类型错误
4)根据文件原名生成临时文件名, 即存在上传目录里的文件名
5)将文件移动到指定上传目录,若目录不存在或权限不够,会移动失败