02-第二章PHP数组

发布时间 2023-03-30 10:54:51作者: 热死也要烫头

其余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)
  }
}

根据以上代码可以总结以下信息:

  1. $_FILES是个数组
  2. 第二行的upload是上传文件的name=upload即文件域
  3. 这个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秒,重新提交后发现确实多了个文件

image-20230313104809417

把这个文件复制出来,重新改后缀名为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

image-20230313111532306

查看路径看看是否可以直接显示图片:http://192.168.2.133/php./img/cat.jpeg

image-20230313111726345