PHP 文件上传

通过 PHP,可以把文件上传到服务器。可以上传文件,上传头像等,不同的浏览器“文件传”有不同的效果.
解析一下前端和后端上传目录结构:
      demo 项目下完成,目录结构为:
      demo
      |-----upload             # 文件上传的目录
      |-----form.html          # 表单文件
      |-----upload_file.php    # php 上传代码
创建一个文件上传表单:
<html>
<head>
  <meta charset="utf-8">
  <title>php上传文件</title>
</head>
<body>
  <form action="upload_file.php" method="post" enctype="multipart/form-data">
      <label for="file">文件名:</label>
      <input type="file" name="file" id="file"><br>
      <input type="submit" name="submit" value="提交">
  </form>
</body>
</html>
<form> 标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用 "multipart/form-data"。
创建上传脚本:
<?php
  if ($_FILES["file"]["error"] > 0){
      echo "错误:" . $_FILES["file"]["error"] . "<br>";
  }else{
      echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
      echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
      echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
      echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"];
  }
?>
通过使用 PHP 的全局数组 $_FILES,可以从客户计算机向远程服务器上传文件。
$_FILES["file"]["name"] - 上传文件的名称
$_FILES["file"]["type"] - 上传文件的类型
$_FILES["file"]["size"] - 上传文件的大小,以字节计
$_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
$_FILES["file"]["error"] - 由文件上传导致的错误代码
上传限制:
<?php
    // 允许上传的图片后缀
    $allowedExts = array("gif", "jpeg", "jpg", "png");
    $temp = explode(".", $_FILES["file"]["name"]);
    $extension = end($temp);        // 获取文件后缀名
    if ((($_FILES["file"]["type"] == "image/gif")
        || ($_FILES["file"]["type"] == "image/jpeg")
        || ($_FILES["file"]["type"] == "image/jpg")
        || ($_FILES["file"]["type"] == "image/pjpeg")
        || ($_FILES["file"]["type"] == "image/x-png")
        || ($_FILES["file"]["type"] == "image/png"))
        && ($_FILES["file"]["size"] < 204800)    // 小于 200 kb
        && in_array($extension, $allowedExts)){
        if ($_FILES["file"]["error"] > 0) {
            echo "错误:: " . $_FILES["file"]["error"] . "<br>";
        }else{
            echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
            echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
            echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
            echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"];
    }
}else{
    echo "非法的文件格式";
}
?>                     
保存被上传的文件
上面的实例在服务器的 PHP 临时文件夹中创建了一个被上传文件的临时副本。
这个临时的副本文件会在脚本结束时消失。要保存被上传的文件,我们需要把它拷贝到另外的位置:
<?php
  // 允许上传的图片后缀
  $allowedExts = array("gif", "jpeg", "jpg", "png");
  $temp = explode(".", $_FILES["file"]["name"]);
  echo $_FILES["file"]["size"];
  $extension = end($temp);     // 获取文件后缀名
  if ((($_FILES["file"]["type"] == "image/gif")
      || ($_FILES["file"]["type"] == "image/jpeg")
      || ($_FILES["file"]["type"] == "image/jpg")
      || ($_FILES["file"]["type"] == "image/pjpeg")
      || ($_FILES["file"]["type"] == "image/x-png")
      || ($_FILES["file"]["type"] == "image/png"))
      && ($_FILES["file"]["size"] < 204800)   // 小于 200 kb
     && in_array($extension, $allowedExts)){
      if ($_FILES["file"]["error"] > 0){
          echo "错误:: " . $_FILES["file"]["error"] . "<br>";
      }else{
          echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
          echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
          echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
          echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "<br>";
          //  upload 目录文件存在不存在
        if (file_exists("upload/" . $_FILES["file"]["name"])){
            echo $_FILES["file"]["name"] . " 文件已经存在。 ";
        }
        else{
            // 如果 upload 目录不存在该文件则将文件上传到 upload 目录下
            move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
            echo "文件存储在: " . "upload/" . $_FILES["file"]["name"];
        }
      }
  }else{
      echo "非法的文件格式";
   }
?>
posted on 2018-11-08 09:39  (代码小工)  阅读(212)  评论(0编辑  收藏  举报