$_FILES[file]['error']

本文介绍了PHP中$_FILES['userfile']['error']字段可能返回的各种错误代码及其含义,包括文件上传成功、文件大小超出限制等常见问题。

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

$_FILES[file]['error']信息说明

从 PHP 4.2.0 开始,PHP 将随文件信息数组一起返回一个对应的错误代码。该代码可以在文件上传时生成的文件数组中的 error 字段中被找到,也就是 $_FILES['userfile']['error']

 

UPLOAD_ERR_OK

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

UPLOAD_ERR_INI_SIZE

其值为 1,上传的文件超过了 php.iniupload_max_filesize 选项限制的值。

UPLOAD_ERR_FORM_SIZE

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

UPLOAD_ERR_PARTIAL

其值为 3,文件只有部分被上传。

UPLOAD_ERR_NO_FILE

其值为 4,没有文件被上传。

UPLOAD_ERR_NO_TMP_DIR

其值为 6,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。

UPLOAD_ERR_CANT_WRITE

其值为 7,文件写入失败。PHP 5.1.0 引进。

 

注意: 以上值在 PHP 4.3.0 之后变成了 PHP 常量。

<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、付费专栏及课程。

余额充值