zoukankan      html  css  js  c++  java
  • 服务端php之文件上传

    知识点

    • echo $_SERVER['PHP_SELF'];  自动获取当前文件的路劲(即提交地址为当前页面)
    • 当一个表单有文件域(即文件上传)的时候,method(提交方式)要设置post,这样更加安全,enctype这个属性为编码类型,固定格式为 multipart/form-data
    • 当文件上传成功后,系统会在服务端开辟一个临时目录来存放上传的文件,而上传之后,会立马消除这个目录
    • UPLOAD_ERR_OK(这是一个记号,其值为0时)
    • PHP 中设置全局变量的两种方式:
      • (1) global $message;
      • (2) $GLOBALS['message']

    $avator['error']分析

    • 其值为0(UPLOAD_ERR_OK)时:表示文件上传成功
    • 其值为1(UPLOAD_ERR_INT_SIZE):表示文件超过了 php.ini 文档中的 upload_max_filesize (服务端支持的单个文件上传的大小)的值。当出现这个情况时,只要根据情况增大这个值即可
    • 其值为2(UPLOAD_ERR_FORM_SIZE):表示上传的文件超过了HTML表单中MAX_FILE_SIZE选项指定的值
    • 其值为3(UPLOAD_ERR_PARTIAL):表示只有部分被上传
    • 其值为4(UPLOAD_ERR_NO_FILE):表示没有文件被上传

    错误分析

    • Warning: POST Content-Length of 17545049 bytes exceeds the limit of 8388608 bytes in Unknown on line 0
    • 当出现上面这句警告的时候,表示超过了服务端所支持的最大的请求体的体积,只需再 php.ini 文档中增大 post_max_size 的大小即可

    测试代码

      html

    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
            
            <input type="file" name="avator">
            <button type="submit">上传</button>
            <!-- 当 $message 有值的时候显示 -->
            <?php if (isset($message)): ?>
                <p style="color: red;"><?php echo $message; ?></p>
            <?php endif ?>
        </form>

      php

    <?php 
    
    function upload () {
        if (empty($_FILES['avator'])) {
            // $message 要设置为全局变量
            $GLOBALS['message'] = '亲,您传的是什么啊!';
            return;
        }
    
        $avator = $_FILES['avator'];
        // $avator => array(5) {
              //   ["name"]=>
              //   string(9) "pic02.jpg"
              //   ["type"]=>
              //   string(10) "image/jpeg"
              //   ["tmp_name"]=>
              //   string(26) "C:WindowsTempphpBBB.tmp"  //临时目录
              //   ["error"]=>
              //   int(0)
              //   ["size"]=>
              //   int(560586)
              // }
    
        echo $avator['error'];
        // 
        // 上传失败时,$avator['error'] = 4
        // echo $avator['error'];
        // UPLOAD_ERR_OK === 0 
        if ($avator['error'] !== UPLOAD_ERR_OK) {
            // 服务端没有接收到上传的文件
            $GLOBALS['message'] = '上传失败';
            return;
        }
    
        // 接收到了文件
        // 将文件从临时目录移动到网站根目录
        $source_file = $avator["tmp_name"];    //源文件
        // 移动的目录路劲中文件夹必须先存在,否则报错
        $target_file = 'uploadFile/' . $avator["name"];//目标放在哪里
        $moved = move_uploaded_file($source_file, $target_file);
    
        if (!$moved) {
            $GLOBALS['message'] = '上传失败';
            return;
        }
    
        // 移动成功(上传成功)
        echo '亲,上传成功了哟!';
    }
    
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        upload();
    }
    
    ?>
  • 相关阅读:
    20级训练赛Round #5
    【Java】equals 和 == 的区别
    [apue] linux 文件访问权限那些事儿
    用 shell 脚本制造连接频繁中断的场景
    用 shell 脚本做 tcp 协议模拟
    c++ 11 是如何简化你的数据库访问接口的
    使用 shell 脚本自动对比两个安装目录并生成差异补丁包
    Minecraft类游戏地形生成机制
    Aery的UE4 C++游戏开发之旅(5)字符&字符串
    基于随机定位的地图信息获取方式
  • 原文地址:https://www.cnblogs.com/duxiu-fang/p/10824955.html
Copyright © 2011-2022 走看看