demo.php
<form action="file.php" method="post" enctype="multipart/form-data">
// name: 最终会成为php中的$_FILES[‘my_file’]
<input type="file" name="my_file">
<button>上传</button>
</form>
file.php
<?php
//文件上传原理
// 1.上传文件类型设置
$fileType = ['jpg','png','gif'];
// 2.上传文件大小限制
$fileSize = 1024*1024*3; //最大不超过3M
// 3.上传的路径地址
$filePath = '/uploads/';
// 4.原始文件名
$fileName = $_FILES['my_file']['name'];
// 5.临时文件名
$tempFile = $_FILMS['my_file']['tmp_name'];
// 6.判断是否上传成功?
$uploadError = $_FILES['my_file']['error'];
if($uploadError > 0){ // 0以上都代表 上传问题
switch($uploadError){
case 1:
case 2: die('上传文件太多');
case 3: die('文件上传不完整');
default: die('未知错误,请重新上传');
}
}
// 7.判断文件扩展名是否正确,第一步的限制上传类型
$type = explode('.', $fileName)[1];
//函数in_array() 搜索数组中是否存在指定的值。
//in_array(值,数组)
//in_array(值,被搜索的数组是否有此值)
if(!in_array($type, $fileType)){
die("不允许上传 {$type} 文件类型");
}
// 8.上传成功后,生成不可重复的文件名
// date('时间显示方式',time()//现在的时间)
// mt_rand(min,max)随机值 sha1()给随机值加密,'.'是分割后缀,最后是图片扩展名
$fileName = date('YmdHis',time()).sha1(mt_rand(1,99)). '.' .$type;
// 9.文件上传
// 函数 is_uploaded_file() 检查指定的文件是否是通过 HTTP POST 上传的。
if(is_uploaded_file($tempFile)){
//函数move_uploaded_file() 将上传的文件移动到新位置。
if(move_uploaded_file($tempFile, __DIR__ . $filePath . $fileName)){
echo '上传成功';
}else{
die('上传失败');
}
}else{
die('非法操作');
}
exit;