其余web文章参考:web学习目录
学习本章知识需要先学会:06-第六篇 前端代码审计的01-第一篇 HTML语言中,关于表单的部分
php文件上传功能$_FILES
用于接收上传的文件相关信息
写两个html,一个用来接收,一个用来上传:
上传文件如下代码:
$_FILES:用来上传文件,代码如下
把数据上传到20.files.php这个页面
<html>
<form
action = "./20.files.php"
method = "post"
enctype = "multipart/form-data"
>
<input type = "file" name = "upload" ><br />
<input type = "submit" name = "submit" value = "submit"/>
</form>
</html>
接收文件如下代码:
<?php
var_dump($_FILES);
?>
打开上传文件界面,上传任意图片文件,显示如下界面,然后查看网页源代码:
array(1) {
["upload"]=>
array(5) {
["name"]=>
string(12) "IMG_4999.jpg"
["type"]=>
string(10) "image/jpeg"
["tmp_name"]=>
string(27) "C:\Windows\Temp\php39AF.tmp"
["error"]=>
int(0)
["size"]=>
int(2047346)
}
}
根据以上代码可以总结以下信息:
- $_FILES是个数组
- 第二行的
upload
是上传文件的name=upload即文件域 - 这个upload有5个属性name、type、tmp_name、error、size
name是上传文件的名字叫:IMG_499.jpg
type是文件类型
tmp_name是路径
error是错误
size是大小
以上信息我们最关心tmp_name,从这个名字可以大概猜到这是个缓存,然后到显示的 "C:\Windows\Temp\php39AF.tmp"这个路径下去找这个文件,但是找不到(在查看里面显示隐藏的文件也没有)
既然文件是提交到20.files.php这个数组,那此处睡眠20秒,重新提交后发现确实多了个文件
把这个文件复制出来,重新改后缀名为jpg,确实就是上传的图片
由此得出结论,服务器收到了上传的图片,但是没有对上传的图片进行处理,所以服务器会把上传的图片清空
重新写10.files.php文件,对上传的图片进行处理
含义如下:
如果$_FILES这个数组非空,文件已经达到服务器,需要把缓存的文件另存一下,另存就需要有两个变量,一个是文件的原路径,一个是文件的目标路径
原路径就是$_tmp_path,在upload这个数组下的tmp_name路径
目标路径就是$target_path,在当前路径下的img文件夹然后拼接缓存文件名
move_uploaded_file缓存目标
<?php
if(!empty($_FILES)){
$_tmp_path = $_FILES['upload']['tmp_name'];
$target_path = "./img/".$_FILES["upload"]['name'];
if(move_uploaded_file($_tmp_path,$target_path)){
echo "upload file success".$target_path;
}else{
echo "upload file error";
}
}
最终显示上传成功,路径为./img/cat.jpeg
查看路径看看是否可以直接显示图片:http://192.168.2.133/php./img/cat.jpeg