文件域处理

一、上传文件和获取

①type属性为file的input元素可以通过表单提交文件(上传文件)

  • 表单form的method属性值必须设为post
  • 表单form的enctype属性值默认为urlencoded,格式是key1=value1&key2=value2
  • 表单form的enctype属性值也必须设为multipart/form-data

②服务端PHP可以通过$_FILES获取上传的文件信息

<?php
    if($_SERVER['REQUEST_METHOD']==='POST'){
        echo '<pre>';
        var_dump($_FILES);
        /*
        array(1) {
            ["img"]=>array(5) {
              ["name"]=>string(26) "QQ截图20180615150657.png"
              ["type"]=>string(9) "image/png"
              ["tmp_name"]=>string(27) "C:WindowsTempphp5B71.tmp"
              ["error"]=>int(0)
              ["size"]=>int(10812)
            }
          }
        */
    }
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>案例</title>
</head>
<body>
    <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data">
        <input type="file" name="img">
        <button>提交</button>
    </form>
</body>
</html>

二、服务端处理

<?php
    function upload(){
        if(!isset($_FILES['img'])){
            //客户端提交的表单内容中没有文本域
            $GLOBALS['message']="请上传文件";
            return;
        }
        $img=$_FILES['img'];
         /*举例:如果提交成功服务端接收的是类似下面的一个关联数组
        array(1) {
            ["img"]=>array(5) {
              ["name"]=>string(26) "QQ截图20180615150657.png"
              ["type"]=>string(9) "image/png"
              ["tmp_name"]=>string(27) "C:WindowsTempphp5B71.tmp"
              ["error"]=>int(0)
              ["size"]=>int(10812)
            }
          }
        */
        if($img['error']!==UPLOAD_ERR_OK){
            //服务端没有接收到上传的文件
            $GLOBALS['message']="上传失败";
            return;
        }
        //接收了文件,将文件从临时目录tmp_name移动到网站范围之内
        $source=$img['tmp_name'];//源文件位置:C:WindowsTempphp5B71.tmp
        $target='./test/'.$img['name'];//目标位置:移动到文件夹test
        $moved=move_uploaded_file($source,$target);
        if(!$moved){
            $GLOBALS['message']='上传失败';
            return;
        }
        //移动成功(上传了)
        $GLOBALS['message']= '上传成功';
    }
    if($_SERVER['REQUEST_METHOD']==='POST'){
        upload();
    }
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>案例</title>
</head>
<body>
    <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data">
        <input type="file" name="img">
        <button>提交</button>
        <p><?php echo isset($GLOBALS['message'])?$GLOBALS['message']:'';?></p>
    </form>
</body>
</html>

三、解决文件上传大小的限制问题

  • 修改php.ini中的post_max_size配置,让服务端可以接受更大的请求体体积

  • 修改php.ini中的upload_max_filesize配置,让服务端可以支持更大的单个上传文件

原文地址:https://www.cnblogs.com/EricZLin/p/9187929.html