PHP文件上传


PHP脚本可以与HTML表单一起使用,以允许用户将文件上传到服务器。最初文件上传到一个临时目录,然后通过PHP脚本重新定位到目标目标。

phpinfo.php 页面中的信息将用于文件上传的临时目录描述为 upload_tmp_dir ,并且可以上传的最大文件大小为 upload_max_filesize 。这些参数被设置到PHP配置文件 php.ini中

上传文件的过程遵循以下步骤 -

  • 用户打开包含具有文本文件,浏览按钮和提交按钮的HTML表单的页面。

  • 用户单击浏览按钮并从本地PC中选择要上传的文件。

  • 所选文件的完整路径出现在文本字段中,然后用户单击提交按钮。

  • 所选文件被发送到服务器上的临时目录。

  • 在表单的action属性中指定为表单处理程序的PHP脚本会检查文件是否已到达,然后将该文件复制到预期的目录中。

  • PHP脚本确认了用户的成功。

像往常一样,在编写文件时,临时和最终位置都需要设置权限来启用文件写入。如果其中任何一个设置为只读,则进程将失败。

上传的文件可以是文本文件或图像文件或任何文件。

创建一个上传表单

以下HTM代码创建一个上传表单。此表单将方法属性设置为 post ,enctype属性设置为 multipart / form-data

<?php
   if(isset($_FILES['image'])){
      $errors= array();
      $file_name = $_FILES['image']['name'];
      $file_size =$_FILES['image']['size'];
      $file_tmp =$_FILES['image']['tmp_name'];
      $file_type=$_FILES['image']['type'];
      $file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));

      $expensions= array("jpeg","jpg","png");

      if(in_array($file_ext,$expensions)=== false){
         $errors[]="extension not allowed, please choose a JPEG or PNG file.";
      }

      if($file_size > 2097152){
         $errors[]='File size must be excately 2 MB';
      }

      if(empty($errors)==true){
         move_uploaded_file($file_tmp,"images/".$file_name);
         echo "Success";
      }else{
         print_r($errors);
      }
   }
?>
<html>
   <body>

      <form action="" method="POST" enctype="multipart/form-data">
         <input type="file" name="image" />
         <input type="submit"/>
      </form>

   </body>
</html>

它会产生以下结果 -

上传表格

创建一个上传脚本

有一个名为 $ _FILES的 全局PHP变量。该变量是关联的二维数组,并保留与上传文件相关的所有信息。因此,如果在上传表单中分配给输入名称属性的值是 文件 ,那么PHP将创建以下五个变量 -

  • $ _FILES ['file'] ['tmp_name'] - 上传的文件位于Web服务器的临时目录中。

  • $ _FILES ['file'] ['name'] - 上传文件的实际名称。

  • $ _FILES ['file'] ['size'] - 上传文件的大小(以字节为单位)。

  • $ _FILES ['file'] ['type'] - 上传文件的MIME类型。

  • $ _FILES ['file'] ['error'] - 与此文件上传关联的错误代码。

下面的例子应该允许上传图像并将结果作为上传的文件信息给出。

<?php
 if(isset($_FILES['image'])){
    $errors= array();
    $file_name = $_FILES['image']['name'];
    $file_size = $_FILES['image']['size'];
    $file_tmp = $_FILES['image']['tmp_name'];
    $file_type = $_FILES['image']['type'];
    $file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));

    $expensions= array("jpeg","jpg","png");

    if(in_array($file_ext,$expensions)=== false){
       $errors[]="extension not allowed, please choose a JPEG or PNG file.";
    }

    if($file_size > 2097152) {
       $errors[]='File size must be excately 2 MB';
    }

    if(empty($errors)==true) {
       move_uploaded_file($file_tmp,"images/".$file_name);
       echo "Success";
    }else{
       print_r($errors);
    }
 }
?>
<html>
 <body>

    <form action = "" method = "POST" enctype = "multipart/form-data">
       <input type = "file" name = "image" />
       <input type = "submit"/>

       <ul>
          <li>Sent file: <?php echo $_FILES['image']['name'];  ?>
          <li>File size: <?php echo $_FILES['image']['size'];  ?>
          <li>File type: <?php echo $_FILES['image']['type'] ?>
       </ul>

    </form>

 </body>
</html>

它会产生以下结果 -

上传脚本