PHP手册第39章有关于处理这些问题的说明,我复制粘贴如下:
--------------------------------------------------------------------------------
第 39 章 文件上传处理
目录
POST 方法上传
错误信息说明
常见缺陷
上传多个文件
对 PUT 方法的支持
POST 方法上传
本特性可以使用户上传文本和二进制文件。用 PHP 的认证和文件操作函数,可以完全控制允许哪些人上传以及文件上传后怎样处理。
PHP 能够接受任何来自符合 RFC-1867 标准的浏览器(包括 Netscape Navigator 3 及更高版本,打了补丁的 Microsoft Internet Explorer 3 或者更高版本)上传的文件。
相关的设置: 请参阅 php.ini 的 file_uploads,upload_max_filesize,upload_tmp_dirpost_max_size 以及 max_input_time 设置选项。
请注意 PHP 也支持 PUT 方法的文件上传,Netscape Composer 和 W3C 的 Amaya 客户端使用这种方法。请参阅对 PUT 方法的支持以获取更多信息。
例 39.1. 文件上传表单
可以如下建立一个特殊的表单来支持文件上传:
<!-- The data encoding type, enctype, MUST be specified as below -->
<form enctype="multipart/form-data" action="__URL__" method="POST">
<!-- MAX_FILE_SIZE must precede the file input field -->
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
<!-- Name of input element determines name in $_FILES array -->
Send this file: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>
以上范例中的 __URL__ 应该被换掉,指向一个真实的 PHP 文件。
MAX_FILE_SIZE 隐
藏字段(单位为字节)必须放在文件输入字段之前,其值为接收文件的最大尺寸。这是对浏览器的一个建议,PHP 也会检查此项。在浏览器端可以简单绕过此设
置,因此不要指望用此特性来阻挡大文件。实际上,PHP 设置中的上传文件最大值是不会失效的。但是最好还是在表单中加上此项目,因为它可以避免用户在花
时间等待上传大文件之后才发现文件过大上传失败的麻烦。
注意: 要确保文件上传表单的属性是 enctype="multipart/form-data",否则文件上传不了。
全局变量 $_FILES 自 PHP 4.1.0 起存在(在更早的版本中用 $HTTP_POST_FILES 替代)。此数组包含有所有上传的文件信息。
以上范例中 $_FILES 数组的内容如下所示。我们假设文件上传字段的名称如上例所示,为 userfile。名称可随意命名。
$_FILES['userfile']['name']
客户端机器文件的原名称。
$_FILES['userfile']['type']
文件的 MIME 类型,如果浏览器提供此信息的话。一个例子是“image/gif”。不过此 MIME 类型在 PHP 端并不检查,因此不要想当然认为有这个值。
$_FILES['userfile']['size']
已上传文件的大小,单位为字节。
$_FILES['userfile']['tmp_name']
文件被上传后在服务端储存的临时文件名。
$_FILES['userfile']['error']
和该文件上传相关的错误代码。此项目是在 PHP 4.2.0 版本中增加的。
文
件被上传后,默认地会被储存到服务端的默认临时目录中,除非 php.ini 中的 upload_tmp_dir 设置为其它的路径。服务端的默认临时
目录可以通过更改 PHP 运行环境的环境变量 TMPDIR 来重新设置,但是在 PHP 脚本内部通过运行 putenv() 函数来设置是不起作用
的。该环境变量也可以用来确认其它的操作也是在上传的文件上进行的。
例 39.2. 使文件上传生效
请查阅函数 is_uploaded_file() 和 move_uploaded_file() 以获取进一步的信息。以下范例处理由表单提供的文件上传。
<?php
// In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead
// of $_FILES.
$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo "File is valid, and was successfully uploaded.\n";
} else {
echo "Possible file upload attack!\n";
}
echo 'Here is some more debugging info:';
print_r($_FILES);
print "</pre>";
?>
接
受上传文件的 PHP 脚本为了决定接下来要对该文件进行哪些操作,应该实现任何逻辑上必要的检查。例如可以用 $_FILES['userfile']
['size'] 变量来排除过大或过小的文件,也可以通过 $_FILES['userfile']['type'] 变量来排除文件类型和某种标准不
相符合的文件,但只把这个当作一系列检查中的第一步,因为此值完全由客户端控制而在 PHP 端并不检查。自 PHP 4.2.0 起,还可以通
过 $_FILES['userfile']['error'] 变量来根据不同的错误代码来计划下一步如何处理。不管怎样,要么将该文件从临时目录中删
除,要么将其移动到其它的地方。
如果表单中没有选择上传的文件,则 PHP 变量 $_FILES['userfile']['size'] 的值将为 0,$_FILES['userfile']['tmp_name'] 将为空。
如果该文件没有被移动到其它地方也没有被改名,则该文件将在表单请求结束时被删除。
例 39.3. 上传一组文件
PHP 的 HTML 数组特性甚至支持文件类型。
<form action="" method="post" enctype="multipart/form-data">
<p>Pictures:
<input type="file" name="pictures[]" />
<input type="file" name="pictures[]" />
<input type="file" name="pictures[]" />
<input type="submit" value="Send" />
</p>
</form>
<?php
foreach ($_FILES["pictures"]["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["pictures"]["tmp_name"][$key];
$name = $_FILES["pictures"]["name"][$key];
move_uploaded_file($tmp_name, "data/$name");
}
}
?>
分享到:
相关推荐
在PHP编程中,文件上传是常见的功能之一,用于让用户上传图片、文档等文件到服务器。为了简化这个过程,开发者通常会编写一个专门的文件上传类,以实现对上传过程的全面控制和错误处理。以下是对"PHP文件上传类"的...
- **多文件上传**:支持单个文件和批量文件上传,提高用户操作效率。 2. **使用方法** 首先,你需要将压缩包中的PHP文件解压到你的项目目录中。然后,在需要实现文件上传功能的PHP脚本中引入该插件,通过调用其...
在PHP中进行文件上传是一项常见的任务,特别是在构建网站或Web应用程序时。PHP文件上传源码主要涉及以下几个关键知识点: 1. **表单设计**:在HTML中,我们需要一个`<form>`元素来允许用户选择要上传的文件。关键...
在PHP中,文件上传是网站开发中常见的功能之一,它允许用户从本地计算机选择文件并将其传输到服务器。为了实现这一功能,PHP提供了一个内置的`$_FILES`全局数组,用于处理HTTP表单中的文件上传数据。然而,在实际...
在PHP编程中,文件上传是常见的功能之一,用于让用户上传图片、文档等文件到服务器。这个"一个php文件上传处理类库"显然提供了一个方便、高效的方式来管理这种操作。类库通常封装了复杂的细节,使得开发者可以更简单...
在PHP开发中,大文件上传是一项常见的需求,尤其是在多媒体内容分享、文件共享或者云存储服务等场景下。然而,PHP默认设置对大文件上传有限制,可能会导致上传失败或者超时。本案例将探讨如何通过PHP实现大文件的...
本项目名为“php文件上传系统”,显然是一个利用PHP实现的文件上传功能模块,结合MySQL数据库进行数据管理。 在PHP中,文件上传主要依赖于HTTP协议的multipart/form-data编码类型。用户在HTML表单中使用`...
标题中的"uploaddify+php文件上传"指的是一个基于Uploaddify插件和PHP技术实现的文件上传系统。Uploaddify是一款JavaScript库,主要用于处理文件上传操作,尤其适用于那些希望在用户端显示上传进度条的Web应用。这个...
以下是一些关于PHP文件上传进度条的知识点: 1. **AJAX异步上传**:传统的文件上传通常会刷新整个页面,而通过AJAX技术,可以实现在后台进行文件上传,前端页面保持不刷新,从而实现进度条展示。在PHP中,通常会...
在PHP中,文件上传是网站常见的一种功能,用于让用户上传图片、文档或其他类型的文件到服务器。这个主题涵盖了许多重要的知识点,包括PHP语法、表单处理、文件操作、错误处理以及安全考虑。以下是对这些关键点的详细...
在PHP中,文件上传是网站应用中常见的功能之一,它允许用户通过网页上传文件到服务器。下面我们将详细探讨PHP文件上传的标准代码实现及其工作原理。 首先,PHP文件上传需要使用`<form>`标签来创建一个表单,其中`...
在PHP编程中,文件上传是常见的功能之一,用于允许用户从他们的设备向服务器上传文件。一个强大的PHP文件上传类能够简化这一过程,处理各种安全问题,并提供灵活性来满足不同的项目需求。下面我们将深入探讨PHP文件...
PHP文件上传类源码PHP文件上传类源码
在PHP中,文件上传是网站常见的一种功能,用于让用户上传图片、文档等文件到服务器。本文将详细讲解如何使用PHP实现文件上传模块,以及在这个过程中需要注意的关键知识点。 首先,我们需要理解HTTP协议中的文件上传...
php大文件上传,百兆文件上传,有进度条,有上传速度 之前发布一个大文件上传,但是问题太多,此版本相对上一个稳定得多 1,将压缩包里的 php_uploadprogress.dll 文件复制到你的PHP 安装目录里的扩展库文件夹 ...
PHP 文件上传介绍 **表单设置**: - 表单必须使用 `enctype="multipart/form-data"` 属性,以便能够正确地发送文件数据。 - 表单中的文件上传字段使用 `<input type="file" name="filename">`,其中 `name` 属性是...
在PHP中,文件上传和下载是两个非常重要的功能,它们在Web开发中有着广泛的应用,例如用户上传头像、分享文件或下载资源等。本文将详细介绍如何使用PHP实现这两个功能。 首先,我们从文件上传开始。PHP提供了`$_...
本示例探讨的是如何使用Ajax与PHP技术来处理大文件上传,这对于提升用户体验,实现无刷新页面操作至关重要。下面我们将详细讲解这个主题。 **一、Ajax介绍** Ajax(Asynchronous JavaScript and XML)是一种在无需...
本文将深入探讨如何创建一个简单的PHP文件上传类,并了解文件上传过程中的一些关键点。 首先,文件上传表单是用户选择并提交文件的关键组件。在提供的代码中,可以看到一个基本的HTML表单,它使用`POST`方法提交...