PHP 中的 $_FILES

本文深入解析了$_FILES变量在处理PHP文件上传任务时的作用,包括如何获取上传文件的名称、类型、大小及临时文件名,以及处理上传过程中可能出现的错误代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文: http://zhidao.baidu.com/question/224059961.html

$_files主要用在当需要上传二进制文件的地方,录入上传一个abc.mp3文件,则服务器端需要获得该文件的相关信息,则通过变量$_files来取得。 

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

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

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

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

$_FILES['userfile']['error'] 
和该文件上传相关的错误代码。['error'] 是在 PHP 4.2.0 版本中增加的。 

注: 在 PHP 4.1.0 版本以前该数组的名称为 $HTTP_POST_FILES,它并不像 $_FILES 一样是自动全局变量。PHP 3 不支持 $HTTP_POST_FILES 数组。 

如果表单中没有选择上传的文件,则 PHP 变量 $_FILES['userfile']['size'] 的值将为 0,$_FILES['userfile']['tmp_name'] 将为 none。

<think>我们正在处理一个关于PHP文件上传的问题。用户想知道如何遍历$_FILES数组来处理文件上传。 在PHP中,当表单中包含文件上传字段(<input type="file">)并且表单的enctype设置为multipart/form-data时,提交表单后,上传的文件信息会存储在超全局变量$_FILES中。 $_FILES数组的结构取决于表单中文件字段的命名方式。如果表单中只有一个文件字段,那么$_FILES是一个包含5个键的数组(name, type, tmp_name, error, size)。如果表单中有多个文件字段,或者文件字段的名称是数组形式(例如name="file[]"),那么$_FILES数组的结构会变得多维。 常见的两种情况: 1. 单个文件上传:表单中只有一个文件字段,或者多个文件字段但名称不同。 2. 多文件上传:使用数组形式的文件字段名,可以同时上传多个文件。 遍历$_FILES数组的关键在于理解其结构。对于多文件上传,$_FILES数组会变成多维数组,其中第一维的键是文件字段的名称,第二维的键是文件属性(name, type, tmp_name, error, size),第三维是文件索引(如果上传了多个文件)。 例如,如果表单中有一个文件字段名为:<input type="file" name="userfile[]" multiple>,那么用户选择了多个文件上传,$_FILES的结构如下: $_FILES['userfile'] = array( 'name' => array('file1.txt', 'file2.jpg'), 'type' => array('text/plain', 'image/jpeg'), 'tmp_name' => array('/tmp/php123', '/tmp/php456'), 'error' => array(0, 0), 'size' => array(123, 456) ); 为了遍历这样的结构,我们需要将多文件上传的数据重新组织成按文件索引的数组。通常的做法是检测$_FILES中某个文件字段的'name'是否是数组(即判断是否是多文件上传),然后重新组织数据结构。 下面是一个通用的方法,可以处理单文件和多文件上传,并将它们统一成一个按文件索引的数组,便于遍历处理。 步骤: 1. 定义一个函数或直接编写代码来重新组织$_FILES数组。 2. 遍历重新组织后的数组,对每个文件进行验证(如错误检查、类型、大小等)和处理(如移动到指定目录)。 注意:在PHP 5.5及以上版本,可以使用更简洁的foreach方式处理,但为了兼容性,我们这里使用通用的方法。 下面是一个示例代码,展示如何遍历$_FILES数组并处理上传的文件:</think>### 如何在 PHP 中遍历 $_FILES 数组处理文件上传 在 PHP 中处理文件上传时,`$_FILES` 数组存储了所有上传文件的信息。遍历此数组的关键在于理解其结构:当表单使用数组形式命名文件字段(如 `name="files[]"`)时,`$_FILES` 会形成多维数组结构。以下是处理步骤: #### 1. 基本遍历方法 ```php <?php if ($_SERVER['REQUEST_METHOD'] === 'POST') { foreach ($_FILES['files']['name'] as $index => $name) { $fileName = $_FILES['files']['name'][$index]; $tmpName = $_FILES['files']['tmp_name'][$index]; $fileSize = $_FILES['files']['size'][$index]; $fileType = $_FILES['files']['type'][$index]; $fileError = $_FILES['files']['error'][$index]; // 检查上传错误 if ($fileError === UPLOAD_ERR_OK) { // 处理文件(例如移动到目标目录) $targetPath = "uploads/" . basename($fileName); if (move_uploaded_file($tmpName, $targetPath)) { echo "文件 {$fileName} 上传成功!<br>"; } else { echo "文件 {$fileName} 移动失败<br>"; } } else { echo "文件 {$fileName} 上传错误: " . $fileError . "<br>"; } } } ?> ``` #### 2. HTML 表单示例 ```html <form method="post" enctype="multipart/form-data"> <input type="file" name="files[]" multiple> <input type="submit" value="上传"> </form> ``` #### 关键说明: 1. **数组结构** `$_FILES['files']` 包含以下子数组: - `name`:原始文件名数组 - `type`:MIME 类型数组 - `tmp_name`:临时文件路径数组 - `error`:错误代码数组 - `size`:文件大小数组(字节) 2. **错误代码处理** 使用 `UPLOAD_ERR_OK` 检查成功上传,常见错误码包括: - `UPLOAD_ERR_INI_SIZE`(文件超过 `php.ini` 限制) - `UPLOAD_ERR_FORM_SIZE`(文件超过表单限制) - `UPLOAD_ERR_PARTIAL`(部分文件上传) 3. **安全注意事项** - 始终用 `move_uploaded_file()` 移动文件(验证文件合法性) - 检查文件扩展名和 MIME 类型 - 设置目录权限(通常为 `755`) - 限制文件大小(通过 `php.ini` 或 `ini_set()`) #### 完整处理流程: 1. 检查请求方法是否为 `POST` 2. 遍历 `$_FILES['字段名']['name']` 获取索引 3. 通过索引获取每个文件的完整信息 4. 验证错误码和文件属性 5. 将临时文件移动到安全目录 > 提示:对于单文件上传(非数组命名),直接访问 `$_FILES['file']['tmp_name']` 等属性即可,无需遍历[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值