
1. HTML 表单配置:启用文件上传
要实现多文件上传,首先需要正确配置html表单。文件上传与普通表单数据提交有所不同,它需要特殊的编码类型来处理二进制文件数据。
关键配置项:
- method="post": 文件上传必须使用POST方法,因为GET方法对数据量有限制,不适合传输文件。
- enctype="multipart/form-data": 这是文件上传最核心的属性。它告诉浏览器不要对表单数据进行URL编码,而是将其编码为一系列“部分”,每个部分包含一个字段的数据或一个文件的内容。如果缺少此属性,文件将无法被服务器正确接收。
示例 HTML 表单代码:
多文件上传示例
在上述代码中,我们为视频和图片分别设置了两个input type="file"字段,它们的name属性分别为vid和pic。action属性指向upload_handler.php,这是服务器端处理文件上传的脚本。
2. PHP 服务器端处理:$_FILES 超全局变量
当表单以enctype="multipart/form-data"提交后,PHP会通过一个特殊的超全局变量$_FILES来接收所有上传的文件信息。$_FILES是一个关联数组,其键是HTML表单中input type="file"字段的name属性值。
立即学习“PHP免费学习笔记(深入)”;
$_FILES 数组结构:
每个上传文件在$_FILES中都对应一个数组,包含以下五个预定义索引:
- name: 客户端机器上的原始文件名。
- type: 文件的MIME类型(例如 image/jpeg、video/mp4)。
- tmp_name: 文件被上传到服务器上的临时存储路径。这是在处理文件时最常用的路径。
- error: 文件的错误代码,表示上传过程中是否发生错误。UPLOAD_ERR_OK(值为0)表示文件上传成功。
- size: 已上传文件的大小,单位为字节。
示例 $_FILES 结构(假设上传了名为 MyVideo.mp4 和 MyImage.jpg):
【极品模板】出品的一款功能强大、安全性高、调用简单、扩展灵活的响应式多语言企业网站管理系统。 产品主要功能如下: 01、支持多语言扩展(独立内容表,可一键复制中文版数据) 02、支持一键修改后台路径; 03、杜绝常见弱口令,内置多种参数过滤、有效防范常见XSS; 04、支持文件分片上传功能,实现大文件轻松上传; 05、支持一键获取微信公众号文章(保存文章的图片到本地服务器); 06、支持一键
// 当提交表单后,$_FILES可能类似这样:
$_FILES = [
'vid' => [
'name' => 'MyVideo.mp4',
'type' => 'video/mp4',
'tmp_name' => '/tmp/phpABC123', // 临时文件路径
'error' => UPLOAD_ERR_OK, // 0表示无错误
'size' => 10240000 // 10MB
],
'pic' => [
'name' => 'MyImage.jpg',
'type' => 'image/jpeg',
'tmp_name' => '/tmp/phpXYZ456', // 临时文件路径
'error' => UPLOAD_ERR_OK, // 0表示无错误
'size' => 512000 // 500KB
]
];3. 文件上传的实现:PHP 脚本
在服务器端,我们需要编写PHP脚本来接收、验证并移动上传的文件到目标目录。
upload_handler.php 示例代码:
";
if (!empty($uploadedFiles)) {
echo "文件上传成功!
";
foreach ($uploadedFiles as $type => $path) {
echo "" . ucfirst($type) . "文件已上传至: " . $path . "
";
}
echo "";
}
if (!empty($errors)) {
echo "上传过程中发生错误:
";
foreach ($errors as $error) {
echo "" . $error . "
";
}
echo "";
}
// 如果用户没有选择任何文件,且没有其他错误
if (empty($uploadedFiles) && empty($errors) &&
(!isset($_FILES['vid']) || $_FILES['vid']['error'] === UPLOAD_ERR_NO_FILE) &&
(!isset($_FILES['pic']) || $_FILES['pic']['error'] === UPLOAD_ERR_NO_FILE)) {
echo "请选择至少一个文件进行上传。
";
}
echo "










