`

PHP 文件上传

阅读更多

通过 PHP,可以把文件上传到服务器。

创建一个文件上传表单

允许用户从表单上传文件是非常有用的。

请看下面这个供上传文件的 HTML 表单:

<html>
<body>

<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" /> 
<br />
<input type="submit" name="submit" value="Submit" />
</form>

</body>
</html>

请留意如下有关此表单的信息:

<form> 标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用 "multipart/form-data"。

<input> 标签的 type="file" 属性规定了应该把输入作为文件来处理。举例来说,当在浏览器中预览时,会看到输入框旁边有一个浏览按钮。

注释: 允许用户上传文件是一个巨大的安全风险。请仅仅允许可信的用户执行文件上传操作。

创建上传脚本

"upload_file.php" 文件含有供上传文件的代码:

<?php
if ($_FILES["file"]["error"] > 0)
  {
  echo "Error: " . $_FILES["file"]["error"] . "<br />";
  }
else
  {
  echo "Upload: " . $_FILES["file"]["name"] . "<br />";
  echo "Type: " . $_FILES["file"]["type"] . "<br />";
  echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
  echo "Stored in: " . $_FILES["file"]["tmp_name"];
  }
?>

通过使用 PHP 的全局数组 $_FILES,你可以从客户计算机向远程服务器上传文件。

第一个参数是表单的 input name,第二个下标可以是 "name", "type", "size", "tmp_name" 或 "error"。就像这样:

  • $_FILES["file"]["name"] - 被上传文件的名称
  • $_FILES["file"]["type"] - 被上传文件的类型
  • $_FILES["file"]["size"] - 被上传文件的大小,以字节计
  • $_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
  • $_FILES["file"]["error"] - 由文件上传导致的错误代码

这是一种非常简单文件上传方式。基于安全方面的考虑,您应当增加有关什么用户有权上传文件的限制。

上传限制

在这个脚本中,我们增加了对文件上传的限制。用户只能上传 .gif 或 .jpeg 文件,文件大小必须小于 20 kb:

<?php

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Error: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Stored in: " . $_FILES["file"]["tmp_name"];
    }
  }
else
  {
  echo "Invalid file";
  }

?>

注释: 对于 IE,识别 jpg 文件的类型必须是 pjpeg,对于 FireFox,必须是 jpeg。

保存被上传的文件

上面的例子在服务器的 PHP 临时文件夹创建了一个被上传文件的临时副本。

这个临时的复制文件会在脚本结束时消失。要保存被上传的文件,我们需要把它拷贝到另外的位置:

<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";

    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>

上面的脚本检测了是否已存在此文件,如果不存在,则把文件拷贝到指定的文件夹。

注释: 这个例子把文件保存到了名为 "upload" 的新文件夹。

分享到:
评论

相关推荐

    php文件上传插件(简洁好用的上传插件)

    本插件是一款简洁而实用的PHP文件上传解决方案,旨在帮助开发者快速集成文件上传功能,提升用户体验。下面将详细介绍这款插件的核心特性、使用方法以及相关知识点。 1. **核心特性** - **易用性**:这款插件设计...

    PHP文件上传类

    以下是对"PHP文件上传类"的详细解析: 1. **类的结构**: - 一个PHP文件上传类通常包含一系列的方法,如`upload()`用于执行实际的文件上传操作,`checkFileSize()`用于检查文件大小,`checkFileType()`用于验证...

    PHP文件上传和页面展示

    本教程将通过WAMP(Windows、Apache、MySQL、PHP)集成环境和PHPStorm IDE,来讲解如何实现PHP文件上传,并在HTML页面上展示上传的图片。 首先,我们需要创建一个HTML表单用于用户选择要上传的文件。在HTML代码中,...

    uploaddify+php文件上传,可传多文件以及带进度条

    标题中的"uploaddify+php文件上传"指的是一个基于Uploaddify插件和PHP技术实现的文件上传系统。Uploaddify是一款JavaScript库,主要用于处理文件上传操作,尤其适用于那些希望在用户端显示上传进度条的Web应用。这个...

    一个php文件上传处理类库

    这个"一个php文件上传处理类库"显然提供了一个方便、高效的方式来管理这种操作。类库通常封装了复杂的细节,使得开发者可以更简单地实现文件上传功能,避免了重复造轮子的过程。 `class.upload.php-master`文件名...

    php文件上传,自己写的文件上传类,附带一个demo,欢迎大牛们提出意见和建议

    这里提供的资源是一个自定义的PHP文件上传类,该类允许开发者更灵活地控制上传过程中的各种参数,比如文件数量、大小、存储目录以及允许的文件类型。让我们详细探讨一下这个主题。 1. **文件上传原理**: PHP文件...

    php文件上传系统

    本项目名为“php文件上传系统”,显然是一个利用PHP实现的文件上传功能模块,结合MySQL数据库进行数据管理。 在PHP中,文件上传主要依赖于HTTP协议的multipart/form-data编码类型。用户在HTML表单中使用`...

    php文件上传模块,实现文件的上传

    ...当表单提交时,这些文件会...总的来说,PHP文件上传模块涉及到HTTP协议、PHP内置函数、文件系统操作、安全策略等多个方面的知识。开发者需要充分理解和掌握这些知识点,才能有效地实现一个健壮且安全的文件上传功能。

    php文件上传进度条

    这正是“php文件上传进度条”这一主题的核心所在。本文将深入探讨如何使用PHP结合AJAX技术实现一个动态的文件上传进度条。 ### PHP文件上传进度条的关键概念 #### 1. UploadProgressMeter类 `UploadProgressMeter`...

    php文件上传进度条集合

    以下是一些关于PHP文件上传进度条的知识点: 1. **AJAX异步上传**:传统的文件上传通常会刷新整个页面,而通过AJAX技术,可以实现在后台进行文件上传,前端页面保持不刷新,从而实现进度条展示。在PHP中,通常会...

    PHP文件上传标准代码

    下面我们将详细探讨PHP文件上传的标准代码实现及其工作原理。 首先,PHP文件上传需要使用`&lt;form&gt;`标签来创建一个表单,其中`enctype="multipart/form-data"`属性是必不可少的,因为它指示浏览器以多部分/二进制格式...

    比较全面的php文件上传类.zip

    这个"比较全面的php文件上传类"是一个专门处理文件上传的工具,它封装了相关操作,提供了更方便、安全的方式来处理文件上传过程。下面将详细讲解这个类库的核心知识点及其在实际开发中的应用。 首先,类库的设计...

    php文件上传源码

    PHP文件上传源码主要涉及以下几个关键知识点: 1. **表单设计**:在HTML中,我们需要一个`&lt;form&gt;`元素来允许用户选择要上传的文件。关键属性包括`enctype="multipart/form-data"`(用于文件上传)和`method="post"`...

    PHP文件上传和邮件发送的类

    `PHP文件上传和邮件发送的类` 提供了简洁的解决方案,使得开发者无需配置php.ini文件就能实现这两个功能,提高了开发效率。以下是对这两个主要知识点的详细说明。 **文件上传** 在PHP中,文件上传主要依赖于HTTP...

    PHP文件上传与下载学习笔记

    本文将深入探讨PHP文件上传的配置、PHP如何获取上传文件信息以及配置文件的相关设置。 ### 1. 文件上传配置 PHP的文件上传涉及到几个关键的配置参数,它们可以在php.ini文件中进行调整: - `upload_max_filesize`...

    php文件上传代码

    以下是对这些关键点的详细解释: ...表单需要设置`enctype="multipart/form-...以上就是PHP文件上传的基本流程和关键知识点。在实际应用中,你还需要根据项目需求进行适当的调整和优化,确保文件上传功能既高效又安全。

    php文件上传类

    然而,在实际项目中,我们通常会创建一个自定义的PHP文件上传类,以实现更灵活、更安全的文件上传管理。 这个"php文件上传类"应该具备以下关键功能和特性: 1. **设置上传限制**:首先,类应允许开发者定义上传...

    强大的php文件上传类强大的php文件上传类

    一个强大的PHP文件上传类能够简化这一过程,处理各种安全问题,并提供灵活性来满足不同的项目需求。下面我们将深入探讨PHP文件上传的核心概念以及如何构建或使用这样的强大类。 一、PHP文件上传基础 1. **表单设置...

    php文件上传类--非常实用

    php文件上传类,很简单的实例,是初学php的很好的参考资料

    flash+php文件上传多选单选都可以

    首先,让我们理解标题“flash+php文件上传多选单选都可以”所涉及的关键概念。Flash是一种广泛使用的多媒体软件平台,它支持动画、视频和交互式内容的创建。在文件上传领域,Flash可以提供比HTML更丰富的用户体验,...

Global site tag (gtag.js) - Google Analytics