一、HTML 表单准备
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Generator" content="EditPlus®">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<title>PHP图片上传</title>
<style>
.form-group {
margin: 20px 0;
}
</style>
</head>
<body>
<form method="post" enctype="multipart/form-data" action="upload.php">
<div class="form-group">
<label>文件上传</label>
<input type="file" name="image">
</div>
<div class="form-group">
<input type="submit" name="upload" value="上传">
</div>
</form>
</body>
</html>
需要注意的是,form
表单在提交文件时不同于提交普通的文本,提交文件时需要指定传值方式为POST
,并且给form
增加一个enctype
属性,其值为multipart/form-data
,这样表单才会把文件的内容编码到HTML
请求中。
这里我们为action
属性指定值为upload.php
,即将文件提交到upload.php
中。
二、PHP 处理上传的文件
第一步,接收文件。
$file = $_FILES['image'];
不同于接收普通文本使用$_GET
或$_POST
,接收文件需要使用$_FILES
,其中image
对应 form
表单 input
组件中 name
属性的值。
打印接收到的文件,可以看到以下信息:
Array
(
[name] => 1.png // 原文件名
[type] => image/png // 文件类型
[tmp_name] => C:\Windows\php4DA9.tmp // 临时文件位置
[error] => 0 // 是否有错误,0为正常,具体错误取决于你的PHP配置文件是否限制了文件上传的信息
[size] => 60814 // 文件大小,单位 kb
)
第二步,取出文件的后缀名。
$ext = strrchr($file['name'], '.');
使用strrchr
函数检测.
在原文件名中最后一次出现的位置,并返回从该位置剩余的所有字符。
输出结果:
.png
第三步,为文件重新命名。
$newName = mt_rand(0000, 9999).time().$ext;
使用mt_rand
函数从0000-9999之间随机生成一个四位数,再连接上当前的时间戳作为新的文件名。
输出结果:
77231619271980.png
第四步,将新命名的文件移动到指定的文件夹进行保存。
假设将文件保存至 uploads/images 目录下,那么将保存路径与文件名拼接成一个完整的路径。
$path = 'uploads/images/'.$newName;
$info = move_uploaded_file($file['tmp_name'], $path);
使用PHP
的move_uploaded_file
函数将文件移动至指定的位置,该函数需要两个参数,第一个参数为原文件的临时位置,第二个参数为指定的保存位置。
原文件的临时位置在第一步中已经得到,需要保存的位置也已经有了,这时直接查看保存结果即可。
print_r($info);
返回 1 ,则为保存成功,其它值则为保存失败。
转载:https://blog.csdn.net/ZhangJiWei_2019/article/details/116106051
查看评论