PHP文件及文件上传 ※

简介: PHP文件及文件上传 ※

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://php.net/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://php.net/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)
  }
}
相关文章
|
1月前
thinkphp5.1隐藏index.php入口文件
thinkphp5.1隐藏index.php入口文件
30 0
thinkphp5.1隐藏index.php入口文件
|
2月前
|
PHP
从建站打拿站 -- PHP(文件上传)
从建站打拿站 -- PHP(文件上传)
12 0
|
3月前
|
PHP 数据安全/隐私保护
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)