美文网首页PHP实战PHP经验分享
GET请求和POST请求、文件上传操作

GET请求和POST请求、文件上传操作

作者: 羽翼的翼 | 来源:发表于2019-02-20 19:05 被阅读6次

    GET请求和POST请求

    文件上传遵循的流程:
    选取文件提交 ==> 存入服务器暂存区 ==> 有后续操作后存入到服务器

    步骤1:在表单中提交

    ☆ 在php中文件上传必须得是post请求

    ☆ 必须给表单设置enctype属性

    /*
        1, 必须给表单设置enctype属性
            application/x-www-form-unlencoded    将参数编码为键值对的格式,标准格式
                (UTF-8 GBK GB2312)  用来处理字符串,默认的编码格式 
            multipart/form-data   专门用来处理特殊文件,比如文件
    */
    <form action=<?php echo $_SERVER['PHP_SELF'] ?> method="post" enctype="multipart/form-data">
        文件选择: <input type="file" name="myFile"> <br>
        <input type="submit">
    </form>
    

    步骤2:在php代码中接收

    ☆ 1. 在php中,上传之后的相关信息都存储在$_FILES 超全局变量中

    ☆ 2.使用一个方法来实现文件的移动,否则文件将在程序结束后被自动遗弃

    ☆ 3.move_uploaded_file(源文件的全路径, 目标文件的全路径)

    ☆ 4.文件夹是手动创建的

    <?php
        // 在php中,上传之后的相关信息都存储在 $_FILES 超全局变量中
        print_r($_FILES)
        /*
            Array(
                [myFile] => Array(
                    [name] => xxx.jpg   (源文件的名称)
                    [type] => image/png  (源文件的类型)
                    [tmp_name] => C:\windows\phpE412.tmp   (保存文件的路径)
                    [error] => 0
                    [size] => 256436
                )
            )
        */
      
      // 使用一个方法来实现文件的移动,否则文件将在程序结束后被自动遗弃
      // move_uploaded_file(源文件的全路径, 目标文件的全路径)
      // 文件夹是手动创建的
      move_uploaded_file($_FILES["myFile"]["tmp_name"], "./upload/temp.png")
    ?>
    

    补充说明(1)

    由于发送的是post请求,结果文件一打开的时候就开始了一些操作,发现报错了
    所以,在打开文件的时候,还得需要一些判断

    <?php
        // 判断当前的数组是否为空,为空则不进入
        if(!empty($_FILES)) {
            move_uploaded_file($_FILES["myFile"]["tmp_name"], "./upload/temp.png")
        }
    ?>
      
    // !!!通过表单元素的属性,限制文件上传的格式
      
    // 1, 在表单元素中可以限制
    <input type="file" accept=".jpg,.png" /> 
      
    // 2, 在后端进行判断
    <?php
        if(!empty($_FILES)) {
            
            $type = $_FILES["myFile"]["type"];
            // *****  strpos(源字符,搜索字符)  可以获取指定字符串在源字符中第一次出现的索引
            if(strpos($type, "image/") === 0) {
                move_uploaded_file($_FILES["myFile"]["tmp_name"], "./upload/temp.png");
            }else {
                echo "您选择的不是一张图片";
            }
        }
    ?>
    

    文件名称不固定,设置合理的文件名称

    <?php
        // 获取当前文件的名称
        $fileName = $_FILES["myFile"]["name"];
        // 拼接文件的名称
        // move_uploaded_file($_FILES["myFile"]["tmp_name"], "./upload/".$fileName);
        // ???? 如果两次都是一次名字,很有可能重名,然后会覆盖之前的文件
    
        // 生成随机数,时间是唯一的
        // $myname = time();
    
        // strrchr(源字符串,指定搜索的字符串)
        $extension = strrchr($fileName, "."); // 如果是 demo.png , 就能获取到后面的 .png
        $myname = time().rand(1000, 9999).$extension; // 得到一个随机的唯一的值, 还带扩展名
    ?>
    
    上传文件.jpg

    补充说明(2)

    当上传的文件比较大的时候,会出不来想要的效果
    而此时,得到的$_FILES数组中,error指向的值为1
    根据查询手册得知,这里的意思指的是,上传的文件超出了大小
    如果需要修改大小的范围,需要修改配置文件

    strlen.jpg
    搜索相关的信息
    maxload.jpg
    得到对应的位置之后,发现默认为2M的大小
    modefieLoad.jpg
    修改完毕之后,一定要记得重启服务器!!!

    服务器对每一次post请求传递做了限制,默认为8M
    可以修改配置文件,改大对应的值,搜索post_max_size
    和上图操作类似 找到 php-ini配置
    找到位置后,该变原有的大小

    补充说明(3)

    同时上传多个文件
    在选择的表单元素中加入multiple, 则可以选中多个文件
    <input type="file" name="myfile" multiple>

    1.0 如果需要后端服务器的 $_FILES 接收多个文件,则需要在name属性值后面加上[ ]

    <input type="file" name="myfile[]" multiple>
    

    2.0 实现完成效果

    <?php
      /*
        Array(
            [myfile] => Array(
                [name] => Array(
                    [0] => 11.png
                    [1] => 111222.jpg
                )
                [tmp_name] => Array(
                    [0] => C:\Windows\phpc51.tmp
                    [1] => C:\Windows\phpc62.tmp
                )
            )
        )
      */
      
      if(!empty($_FILES)) {
            // 获取扩展名的数组
            $nameArr = $_FILES["myfile"]["name"];
            $pathArr = $_FILES["myfile"]["tmp_name"];
            foreach($pathArr as $key => $value) {
                // 获取唯一的图片名称
                $name = time().rand(1000, 9999).strrchr($nameArr[$key], ".");
                // 将文件存储到永久目录  move_upload_file
                move_upload_file($value, "./upload/".$name);
            }   
      }
    ?>
    

    相关文章

      网友评论

        本文标题:GET请求和POST请求、文件上传操作

        本文链接:https://www.haomeiwen.com/subject/dsckyqtx.html