`

PHP文件上传的原理及实现

    博客分类:
  • php
阅读更多
PHP文件上传的原理及实现

利用php的文件函数来实现上传

这段代码分为两个文件,一个为upload.html,一个是upload.php
<form enctype="multipart/form-data" action="upload.php" method="post"> 
<input type="hidden" name="max_file_size" value="100000"> 
<input name="userfile" type="file">   
<input type="submit" value="上传文件"> 
</form>

其中,请注意
这是一个标签,我们要实现文件的上传,必须指定为 multipart/form-data,否则服务器将不知道要干什么。

值得注意的是文件upload.html中表单选项 MAX_FILE_SIZE 的隐藏值域,通过设置其Value(值)可以限制上载文件的大小。

MAX_FILE_SIZE 的值只是对浏览器的一个建议,实际上它可以被简单的绕过。因此不要把对浏览器的限制寄希望于该值。实际上,PHP 设置中的上传文件最大值,是不会失效的。但是最好还是在表单中加上 MAX_FILE_SIZE,因为它可以避免用户在花时间等待上传大文件之后才发现该文件太大了的麻烦。
$f=&$HTTP_POST_FILES['Myfile']; 
$dest_dir='uploads';//设定上传目录 
$dest=$dest_dir.'/'.date("ymd")."_".$f['name'];//设置文件名为日期加上文件名避免重复 
$r=move_uploaded_file($f['tmp_name'],$dest); 
chmod($dest, 0755);//设定上传的文件的属性

或者
<?php copy($_FILES[MyFile][tmp_name],$_FILES[MyFile][name]);?>


以上范例中 $_FILES 数组的内容如下所示。我们假设文件上传字段的名称为 userfile(名称可随意命名)

$_FILES['userfile']['name'] 客户端机器文件的原名称。

$_FILES['userfile']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如“image/gif”。

$_FILES['userfile']['size'] 已上传文件的大小,单位为字节。

$_FILES['userfile']['tmp_name'] 文件被上传后在服务端储存的临时文件名。

$_FILES['userfile']['error'] 和该文件上传相关的错误代码

值:0; 没有错误发生,文件上传成功。

值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。

值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。

值:3; 文件只有部分被上传。

值:4; 没有文件被上传。

[编辑]PHP上传文件涉及到的参数

PHP默认的上传限定是最大2M,想上传超过此设定的文件,需要调整PHP、 apache等的一些参数. 下面,我们简要介绍一下PHP文件上传涉及到的一些参数:

file_uploads

是否允许通过HTTP上传文件的开关,默认为ON即是开

upload_tmp_dir

upload_tmp_dir用来说明PHP上传的文件放置的临时目录,要想上传文件,得保证服务器没有关闭临时文件和有对文件夹的写权限,如果未指定则PHP使用系统默认值

upload_max_filesize

允许上传文件大小的最大值,默认为2M

post_max_size

控制在采用POST方法进行一次表单提交中PHP所能够接收的最大数据量。如果希望使用PHP文件上传功能,则需要将此值改为比upload_max_filesize要大

max_input_time

以秒为单位对通过POST、GET以及PUT方式接收数据时间进行限制。如果应用程序所运行环境处在低速链路上,则需要增加此值以适应接收数据所需的更多时间

memory_limit

为了避免正在运行的脚本大量使用系统可用内存,PHP允许定义内存使用限额。通过 memory_limit变量来指定单个脚本程序可以使用的最大内存容量变量memory_limit的值应当适当大于post_max_size的值

max_execution_time

max_execution_time设置了在强制终止脚本前PHP等待脚本执行完毕的时间,此时间以秒计算。当脚本进入了一个无限循环状态时此变量非常有用。然而,当存在一个需要很长时间完成的合法活动时(例如上传大型文件),这项功能也会导致操作失败。在这样的情况下必须考虑将此变量值增加,以避免PHP在脚本正在执行某些重要过程的时候将脚本关闭

对于linux主机,可能在/etc/httpd/conf.d /access.conf/下面里面还有php.conf 文件,这个文件可能会解决一些系统的文件大小限制问题

[编辑]利用discuz实现PHP大文件上传应用举例

论坛的附件功能当初设计的初衷并不是为了文件管理,由于服务器配置,php,网络等多方面因素,使得通过论坛上传文件并不是一个好方案。

对于确实需要改善论坛附件上传条件的朋友可以尝试将上面提及的参数在php.ini 进行设置,以适应大文件上传的需要。同时别忘记在论坛的后台相应做附件限制的地方进行设置。

论坛主要有2个地方可以对附件上传的大小进行限制,级别从高到低依次为:

帖子相关---附件类型尺寸

用户组---附件相关

同时,下面提供一个配置指导,来源一些成功通过http上传大附件的朋友的提供,当然,由于大家的服务器配置情况以及网络情况不同,并不一定适用你的情况,可能很多地方需要参照修改:

打开php.ini,

参数 设置 说明

file_uploads on 是否允许通过HTTP上传文件的开关。默认为ON即是开

upload_tmp_dir -- 文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹

upload_max_filesize 8m 望文生意,即允许上传文件大小的最大值。默认为2M

post_max_size 8m 指通过表单POST给PHP的所能接收的最大值,包括表单里的所有值。默认为8M

说明

一般地,设置好上述四个参数后,在网络正常的情况下,上传<=8M的文件是不成问题

但如果要上传>8M的大体积文件,只设置上述四项还一定能行的通。除非你的网络真有100M/S的上传高速,否则你还得继续设置下面的参数。

max_execution_time 600 每个PHP页面运行的最大时间值(秒),默认30秒

max_input_time 600 每个PHP页面接收数据所需的最大时间,默认60秒

memory_limit 8m 每个PHP页面所吃掉的最大内存,默认8M

把上述参数修改后,在网络所允许的正常情况下,就可以上传大体积文件了

[编辑]论坛文件上传常见错误类型(不断总结中...)

Warning: Unable to open '\\php2' for reading: Invalid argument in e:\user\web\larksoft.net\upload\upfile.php on line 10


是php的upload_tmp_dir的原因,所指定的目录必须可读可写

Parse error: parse error in c:\program files\apache group\apache\htdocs\mdweb\ftpfile\upload.php on line 14


Parse error一般都是语句的问题,比如象“;”,“'”,“)”等等的匹配问题

来自:http://tech.ccidnet.com/art/3089/20080626/1489677_1.html

分享到:
评论

相关推荐

    PHP开发环境下文件上传的原理与实现.pdf

    下面将详细论述PHP开发环境下文件上传的原理与实现方法,并对上传文件的格式类型及大小进行限制。 一、PHP简介 PHP(Hypertext Preprocessor的缩写)是一种运行于服务器端并完全跨平台的嵌入式脚本编程语言。PHP...

    php实现文件上传

    本篇文章将深入探讨PHP文件上传的原理和实现步骤,以及如何实现图片预览。 首先,我们需要了解HTTP协议在文件上传中的作用。在Web表单提交时,如果设置了`enctype="multipart/form-data"`,浏览器会将表单数据分割...

    (第14讲) PHP上传原理及应用

    在本讲中,我们主要探讨的是PHP中的文件上传原理及其实际应用。这涉及到HTML表单的设置、PHP内置的处理上传文件的系统函数以及确保文件安全上传的相关验证方法。以下是详细的知识点解析: 1. **FORM标签enctype属性...

    文件上传原理.pdf

    ### 文件上传原理详解 #### 一、引言 随着信息技术的快速发展,Web应用程序已经成为现代办公自动化系统中的核心组成部分。在这些应用中,文件上传是一项基本而又重要的功能,它允许用户从本地计算机向服务器发送...

    php文件上传原理与实现方法详解

    以下是对PHP文件上传原理与实现方法的详细解析: 首先,了解文件上传的原理。当用户通过HTML表单选择文件并提交时,浏览器会将文件作为二进制数据封装在HTTP请求中,以`multipart/form-data`的格式发送。PHP服务器...

    web文件上传原理讲解与代码

    本教程将深入探讨Web文件上传的原理,并提供相关的Java实现代码,帮助开发者理解和掌握这一关键技术。 首先,理解Web文件上传的基本原理。HTTP协议是Web通信的基础,它允许客户端(浏览器)与服务器进行数据交换。...

    Android 文件实现断点上传

    在Android平台上,文件上传是一项常见的任务,特别是在移动应用开发中,比如用户分享照片或...通过合理的设计和实现,可以显著提高文件上传的可靠性和效率,尤其在上传大文件和网络环境不稳定的场景下显得尤为重要。

    php多文件上传功能实现原理及代码

    以下将详细解释多文件上传的实现原理,并提供一个简单的代码示例。 首先,要实现多文件上传,需要创建一个HTML表单,允许用户选择他们想要上传的文件。在表单中,`&lt;input type="file"&gt;` 元素用于让用户选择文件。...

    php文件上传进度条

    实现PHP文件上传进度条,不仅需要掌握PHP编程技巧,还需要理解AJAX的工作原理及其在Web开发中的应用。通过合理的类设计、HTML/CSS布局以及有效的前后端通信策略,可以为用户提供一个直观、友好的文件上传体验。这...

    计算机病毒与防护:文件上传漏洞原理.ppt

    文件上传功能的实现通常涉及用户通过Web界面选择本地文件,然后将文件发送到服务器进行存储。如果在上传过程中,服务器没有进行有效的安全检查,比如验证文件类型、内容或者大小,攻击者可能会上传包含恶意脚本(如...

    在ASP.NET中实现多文件上传

    首先,我们需要理解基本的文件上传原理。在HTML中,`&lt;input type="file"&gt;`元素用于让用户选择本地文件。为了支持多文件上传,可以设置`multiple`属性,让用户一次选择多个文件。在ASP.NET中,我们通常使用`...

    PHP实现多个文件上传

    在本示例中,我们将探讨如何使用PHP实现多个文件上传的功能。这个功能对于任何需要让用户上传多份文件的Web应用程序都是至关重要的。我们将分析提供的HTML和PHP代码,以理解其工作原理。 首先,HTML部分创建了一个...

    多文件上传例子及说明

    这个"多文件上传例子及说明"的压缩包提供了一个示例,教你如何实现一次性上传一个文件夹内的所有文件。以下是对这个主题的详细解释。 首先,我们需要理解多文件上传的原理。在Web开发中,通常使用HTML5的`...

    PHP实现单文件上传与下载

    一、PHP文件上传原理 将客户端文件上传到服务器端,再将服务器端的临时文件移动到指定的文件夹下面。 二、开发环境 1、环境搭建:Windows 8+Apache 2.4.18+MySQL 5.7.11+PHP 7.1.0 。 2、文本编辑器:Sublime Text3...

    一个php文件上传处理类库

    类库通常封装了复杂的细节,使得开发者可以更简单地实现文件上传功能,避免了重复造轮子的过程。 `class.upload.php-master`文件名暗示这是一个主类文件,可能包含了整个文件上传处理类库的核心代码。在PHP中,类库...

    Web 开发实现文件上传功能

    在Web开发中,实现文件上传功能是常见的需求,特别是在构建交互性强、用户参与度高的网站时。本篇文章将深入探讨如何在不同的Web框架下实现这一功能,并提供一个名为"smartUpload"的工具作为示例。 文件上传是允许...

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

    1. **文件上传原理**: PHP文件上传基于HTTP协议,通过`&lt;input type="file"&gt;`标签在HTML表单中提供选择文件的功能。当用户提交表单时,服务器端的PHP脚本可以通过`$_FILES`全局数组来访问上传的文件信息,包括...

    jsp实现文件上传功能组件

    在我们的例子中,对smartUpload组件进行了进一步的封装,这意味着它可能已经预定义了一些方法,如`upload()`或`saveFile()`,使得在JSP页面中调用文件上传功能变得更加直观。这样的封装可以减少代码量,提高代码...

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

    一、PHP文件上传原理 1. **HTTP协议**:文件上传实际上是通过HTTP协议中的POST请求来完成的。当用户点击上传按钮时,浏览器将文件数据和表单数据一起发送到服务器。 2. **表单提交**:在HTML中,我们需要设置一个`...

Global site tag (gtag.js) - Google Analytics