学习PHP时,你可能会遇到PHP上传问题,这里将介绍PHP上传问题的解决方法,在这里拿出来和大家分享一下。本特性可以使用户上传文本和二进制文件。用 PHP 的认证和文件操作函数,可以完全控制允许哪些人上传以及文件上传后怎样处理PHP上传的文件。请注意 PHP 也支持 PUT 方法的文件上传,Netscape Composer 和 W3C 的 Amaya 客户端使用这种方法。
例子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 -->
PHP上传之POST方法上传
本特性可以使用户上传文本和二进制文件。用 PHP 的认证和文件操作函数,可以完全控制允许哪些人上传以及文件上传后怎样处理。PHP 能够接受任何来自符合 RFC-1867 标准的浏览器(包括 Netscape Navigator 3 及更高版本,打了补丁的 Microsoft Internet Explorer 3 或者更高版本)上传的文件。请注意 PHP 也支持 PUT 方法的文件上传,Netscape Composer 和 W3C 的 Amaya 客户端使用这种方法。
例子2. 文件上传表单
可以如下建立一个特殊的表单来支持文件上传:
- ___FCKpd___0
以上范例中的 __URL__ 应该被换掉,指向一个真实的 PHP 文件。
#T#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() 函数来设置是不起作用的。该环境变量也可以用来确认其它的操作也是在上传的文件上进行的。