Note: 相关的设置,请参阅 php.ini 的 file_uploads,upload_max_filesize,upload_tmp_dirpost_max_size 以及 max_input_time 设置选项。
一、文件上传表单
可以如下建立一个特殊的表单来支持文件上传:
<!-- 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 设置中的上传文件最大值是不会失效的。但是最好还是在表单中加上此项目,因为它可以避免用户在花时间等待上传大文件之后才发现文件过大上传失败的麻烦。
Note:
要确保文件上传表单的属性是 enctype="multipart/form-data",否则文件上传不了。
二、全局数组$_FILES
全局变量 $_FILES 自 PHP 4.1.0 起存在,此数组包含有所有上传的文件信息。
我们假设文件上传字段的名称如上例所示,为 userfile(名称可随意命名)。
$_FILES['userfile']['name'] — — 客户端机器文件的原名称。
$_FILES['userfile']['type'] — — 文件的 MIME 类型,如果浏览器提供此信息的话。
$_FILES['userfile']['size'] — — 已上传文件的大小,单位为字节。
$_FILES['userfile']['tmp_name'] — — 文件被上传后在服务端储存的临时文件名。
$_FILES['userfile']['error'] — — 文件上传相关的错误代码。[PHP官方]
文件被上传后,默认地会被储存到服务端的默认临时目录中,除非 php.ini 中的 upload_tmp_dir 设置为其它的路径。