分享

PHP文件及文件上传 ※

 流楚丶格念 2022-01-14

文章目录

1. 属性:enctype=“multipart/from-data”

在这里插入图片描述

<?php 

if ($_SERVER['REQUEST_METHOD']=== 'POST') {
    // 接收文件 使用一个叫做 $_FILE 超全局成员
    var_dump($_FILE);
}

?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件</title>
</head>
<body>
    <!-- 如果一个表单中有文件域(文件上传),必须将表单中的 method 设置为 post ,enctype 设置为 multipart/form-data  -->
    <!--    enctype 默认为 urlencoded 格式  ->发送前编码所有字符(默认) 
        key1=value1&key2=value2    -->
        <form action="<?php echo  $_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/from-data">

            <!-- 1  -->
            <input type="text" name="foo">
            <input type="text" name="bar">
            
            <!-- 2 -->
            <input type="file" name="img">
            <button>提交</button>

        </form>
</body>
</html>

2. 文件上传

案例:文件上传处理基本逻辑

展示

选择文件
在这里插入图片描述

传到./upload中

在这里插入图片描述

代码

<?php

function upload () {
  if (!isset($_FILES['avatar'])) {
    $GLOBALS['message'] = '别玩我了';
    // 客户端提交的表单内容中根本没有文件域
    return;
  }

  $avatar = $_FILES['avatar'];
  // $avatar => array(5) {
  //   ["name"]=>
  //   string(11) "icon-02.png"
  //   ["type"]=>
  //   string(9) "image/png"
  //   ↓↓↓↓↓↓  存到服务器的临时位置  ↓↓↓↓↓↓
  //   ["tmp_name"]=>
  //   string(27) "C:\Windows\Temp\php1138.tmp"
  //   ["error"]=>
  //   int(0)
  //   ["size"]=>
  //   int(4398)
  // }
  echo $avatar['error'];
  if ($avatar['error'] !== UPLOAD_ERR_OK) {
    // 服务端没有接收到上传的文件
    $GLOBALS['message'] = '上传失败';
    return;
  }

  // 接收到了文件
  // 将文件从临时目录移动到网站范围之内
  $source = $avatar['tmp_name']; // 源文件在哪
  // => 'C:\Windows\Temp\php1138.tmp'
  $target = './uploads/' . $avatar['name']; // 目标放在哪
  // => './uploads/icon-02.png'
  // 移动的目标路径中文件夹一定是一个已经存在的目录
  $moved = move_uploaded_file($source, $target);

  if (!$moved) {
    $GLOBALS['message'] = '上传失败';
    return;
  }

  // 移动成功(上传整个过程OK)

}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  // 接收文件 使用一个 叫做 $_FILES 超全局成员
  // var_dump($_FILES);
  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="avatar">
    <button>上传</button>
    <?php if (isset($message)): ?>
    <p style="color: hotpink"><?php echo $message; ?></p>
    <?php endif ?>
  </form>
</body>
</html>

上传文件大小限制问题

http:///manual/zh/features.file-upload.php
在这里插入图片描述

注意:php.ini就在php的安装目录下,我的wamp都在D盘

在这里插入图片描述

修改 php.ini 中的 post_max_size 配置,让服务端可以接受更大的请求体体积
在这里插入图片描述

修改 php.ini 中的 upload_max_filesize 配置,让服务端支持更大的单个上传文件*暂时作为了解

type 属性

type 属性为 file 的 input 元素可以通过表单提交文件(上传文件),服务端 PHP 可以通过 $_FILES 获取上
传的文件信息。

<?php

// 如果选择了文件 $_FILES['file']['error'] => 0
// 详细的错误码说明:http:///manual/zh/features.file‐upload.errors.php

if ($_FILES['file']['error'] === 0) {

// PHP 在会自动接收客户端上传的文件到一个临时的目录
$temp_file = $_FILES['file']['tmp_name'];

// 我们只需要把文件保存到我们指定上传目录

$target_file = '../static/uploads/' . $_FILES['file']['name']; 
if (move_uploaded_file($temp_file, $target_file)) {
$image_file = '/static/uploads/' . $_FILES['file']['name'];

}

}

$_FILES 同样也是一个关联数组,键为表单的 name ,内容如下:

array(1) { 
["avatar"]=> array(5) {
["name"]=>string(17) "demo.jpg"

["type"]=>
string(10) "image/jpeg" ["tmp_name"]=>
string(27) "C:\Windows\Temp\php786C.tmp" ["error"]=>
int(0) ["size"]=> int(29501)
}

}

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多