`

Php学习《四》 ------ 文件上传

    博客分类:
  • 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" 的新文件夹。

摘录:http://www.w3school.com.cn/php/php_file_upload.asp
分享到:
评论

相关推荐

    php学习可用--开发案例

    例如,"upload"文件夹可能包含了关于文件上传的示例代码,这是Web开发中常见的功能。通过这些案例,学习者可以了解如何处理用户上传的文件,验证其格式和大小,以及将文件存储到服务器的特定位置。 "版本更新日志....

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

    在PHP中,文件上传和下载是常见的Web应用功能,用于处理用户上传的文件或提供文件供用户下载。本文将深入探讨PHP文件上传的配置、PHP如何获取上传文件信息以及配置文件的相关设置。 ### 1. 文件上传配置 PHP的文件...

    php 20个实例文件简单上传下载源码

    在PHP编程领域,文件上传和下载是常见的功能需求,尤其对于Web应用程序来说。这个压缩包提供的"php 20个实例文件简单上传下载源码"集合了20个不同的示例,涵盖了PHP文件操作的基本原理和实践技巧。下面将详细阐述...

    php多文件上传类.zip

    在PHP开发中,多文件上传是一项常见的需求,特别是在构建用户交互性强、数据交换频繁的Web应用时。"php多文件上传类.zip" 提供了一个专为处理这种需求设计的类库,它允许用户同时上传多个文件,提高了工作效率,简化...

    第十二节 文件上传-图片Webshell上传-01

    文件上传-图片Webshell上传 ...在Web安全训练营课程中,我们将深入探讨文件上传和文件包含漏洞的安全隐患,并学习如何防止这些漏洞的出现。欢迎关注我们的课程,学习Web安全知识,提高自己的安全意识。

    ng-file-upload文件上传

    标题 "ng-file-upload文件上传" 指的是一个使用AngularJS框架实现的文件上传功能,主要依赖于名为“ng-file-upload”的插件。这个插件是AngularJS社区中广泛使用的,它提供了丰富的功能,如多文件选择、进度条显示、...

    php文件上传系统

    在IT行业中,PHP是一种广泛使用的服务器端脚本语言,尤其在...在压缩包文件列表中提到的“php文件上传系统”很可能包含了完整的源代码和相关资源,你可以进一步研究学习如何将这些组件整合成一个完整的文件上传系统。

    PHP---学习文档

    **PHP学习文档概述** PHP(Hypertext Preprocessor,超文本预处理器)是一种广泛使用的开源脚本语言,尤其适用于Web开发,可以嵌入到HTML中使用。PHP的主要目标是使服务器端的网页制作更容易,它提供了丰富的功能,...

    php多文件上传实例

    在PHP开发中,文件上传是一项常见的功能,尤其在构建用户交互性强的Web应用时更为重要。本实例将探讨如何在PHP环境中实现...通过学习和实践这两个文件,我们可以更有效地在自己的项目中实现安全、可靠的文件上传功能。

    第九节 文件上传-绕过黑名单验证(路径拼接绕过)-01

    文件上传-绕过黑名单验证(路径拼接绕过) 在 Web 应用程序中,文件上传是非常常见...在这节课程中,我们学习了文件上传-绕过黑名单验证(路径拼接绕过),了解了黑名单验证的原理和缺陷,掌握了攻击技术和防御方法。

    WEB渗透学习-upload-labs靶场

    "upload-labs"靶场是一个专为学习和实践文件上传漏洞设计的平台,它提供了21个关卡,从基础到高级,帮助新手逐步提升对这类漏洞的理解和应对能力。 ### 一、文件上传漏洞概述 文件上传漏洞通常发生在Web应用程序中...

    简单的前端加PHP通过AJAX异步多文件上传(依赖HTML5)【案例】

    在现代Web开发中,异步文件上传是一种常见的需求,它能提供更好的用户体验,因为用户可以在不刷新页面的情况下发送数据。本案例重点讲解如何利用...通过学习和实践,开发者可以构建出更加高效、安全的文件上传系统。

    文件上传插件 ng-file-upload

    通过查看和学习这些示例,你可以了解如何在AngularJS应用中集成文件上传功能,包括如何配置指令、绑定事件、设置参数等。 在实际应用中,你需要在你的AngularJS模块中注入`ngFileUpload`服务,然后就可以在控制器、...

    PHP程序-梦想网络提供的PHP单文件上传程序&nbsp;

    总的来说,梦想网络提供的PHP单文件上传程序是一个实用的小工具,它展示了如何在PHP环境中处理文件上传,同时也为开发者提供了进一步学习和改进的基础。通过深入理解这个程序的工作原理,我们可以更好地掌握PHP的...

    PHP入门学习资料-自己总结

    以上是对PHP入门学习的初步介绍,随着深入学习,你将掌握更多高级特性,如会话管理、Cookie、文件上传、邮件发送等。实践是最好的老师,尝试编写简单的PHP脚本并运行,你会发现PHP的无穷魅力。祝你在PHP学习道路上...

    upload-labs-master【文件上传靶场】

    "upload-labs-master【文件上传靶场】" 是一个针对文件上传功能安全性的测试平台,主要目的是帮助开发者、安全人员以及爱好者检验和学习文件上传漏洞的防范措施。在这个靶场中,你可以模拟不同的攻击手段,了解如何...

    PHP文件管理系统源码.zip

    - 文件上传:PHP提供`move_uploaded_file()`函数用于处理用户上传的文件,确保安全性和有效性。 - 文件下载:使用`readfile()`或`file_get_contents()`函数读取文件内容,并设置HTTP头信息触发浏览器下载。 - 文件...

    php100-014-PHP上传原理及应用

    在PHP中,文件上传是网站开发中常见的功能之一,它允许用户从本地计算机上传文件到服务器。...通过对这些知识点的学习和实践,开发者可以创建出安全、稳定的文件上传功能,满足网站或应用程序的需求。

    php-CMS文件管理器

    在文件管理器中,表单常用于文件上传、搜索、删除等操作。 8. **错误处理和日志记录**:良好的错误处理和日志记录机制对于调试和问题排查至关重要。PHP提供`error_reporting()`和`error_log()`等函数来处理错误和...

Global site tag (gtag.js) - Google Analytics