php实现多文件上传
多文件上传的实现方法
在PHP中实现多文件上传可以通过HTML表单结合PHP文件处理函数完成。以下是具体步骤和代码示例:
HTML表单设置
创建一个包含多文件上传功能的HTML表单,需设置enctype="multipart/form-data"并添加multiple属性:
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="files[]" multiple>
<input type="submit" value="上传文件">
</form>
PHP文件处理逻辑
在服务器端(如upload.php)接收并处理上传的文件:

<?php
if(isset($_FILES['files'])){
$uploadDir = 'uploads/';
if (!file_exists($uploadDir)) {
mkdir($uploadDir, 0777, true);
}
$errors = [];
foreach($_FILES['files']['tmp_name'] as $key => $tmpName){
$fileName = $_FILES['files']['name'][$key];
$fileSize = $_FILES['files']['size'][$key];
$fileTmp = $_FILES['files']['tmp_name'][$key];
$fileType = $_FILES['files']['type'][$key];
// 文件验证(示例:限制为5MB以内的图片)
$maxSize = 5 * 1024 * 1024;
$allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
if($fileSize > $maxSize){
$errors[] = "$fileName 超过大小限制(5MB)";
}
if(!in_array($fileType, $allowedTypes)){
$errors[] = "$fileName 类型不允许";
}
// 无错误则移动文件
if(empty($errors)){
$uploadPath = $uploadDir . basename($fileName);
if(move_uploaded_file($fileTmp, $uploadPath)){
echo "$fileName 上传成功<br>";
} else {
$errors[] = "$fileName 上传失败";
}
}
}
// 输出错误信息
if(!empty($errors)){
foreach($errors as $error){
echo $error . "<br>";
}
}
}
?>
安全增强建议
-
文件名处理:避免使用原始文件名,防止路径遍历攻击:
$safeFileName = uniqid() . '_' . preg_replace('/[^a-z0-9\._-]/i', '_', $fileName); -
扩展名验证:不要仅依赖
$_FILES['type'],检查实际文件扩展名:
$fileExt = strtolower(pathinfo($fileName, PATHINFO_EXTENSION)); $allowedExts = ['jpg', 'png', 'gif']; -
大小限制:可在php.ini中设置全局限制:
upload_max_filesize = 20M post_max_size = 21M
进阶功能示例
如需显示上传进度,可配合JavaScript实现:
// 前端使用XMLHttpRequest或Fetch API监听progress事件
document.querySelector('form').addEventListener('submit', function(e){
let formData = new FormData(this);
let xhr = new XMLHttpRequest();
xhr.upload.addEventListener('progress', function(event){
let percent = (event.loaded / event.total) * 100;
console.log(percent + '% uploaded');
});
xhr.open('POST', 'upload.php', true);
xhr.send(formData);
e.preventDefault();
});
通过以上方法可实现安全可靠的多文件上传功能,开发者可根据实际需求调整验证规则和存储逻辑。






