php实现多个上传
PHP 实现多个文件上传
在 PHP 中实现多个文件上传需要处理 $_FILES 超全局数组,并通过循环或批量处理方式管理上传的文件。以下是具体实现方法:
表单设置
确保 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="Upload">
</form>
处理上传的文件
在 PHP 脚本(如 upload.php)中,通过遍历 $_FILES['files'] 数组处理每个文件:
if (isset($_FILES['files'])) {
$uploadDir = 'uploads/';
if (!is_dir($uploadDir)) {
mkdir($uploadDir, 0755, true);
}
foreach ($_FILES['files']['tmp_name'] as $key => $tmpName) {
$fileName = basename($_FILES['files']['name'][$key]);
$targetPath = $uploadDir . $fileName;
if (move_uploaded_file($tmpName, $targetPath)) {
echo "File {$fileName} uploaded successfully.<br>";
} else {
echo "Failed to upload {$fileName}.<br>";
}
}
}
错误处理与验证
检查文件上传状态和类型,确保安全性:
foreach ($_FILES['files']['tmp_name'] as $key => $tmpName) {
$error = $_FILES['files']['error'][$key];
if ($error !== UPLOAD_ERR_OK) {
echo "Error uploading file: " . $errorMessages[$error];
continue;
}
$fileType = strtolower(pathinfo($_FILES['files']['name'][$key], PATHINFO_EXTENSION));
$allowedTypes = ['jpg', 'png', 'pdf'];
if (!in_array($fileType, $allowedTypes)) {
echo "Invalid file type: {$fileType}.";
continue;
}
}
文件大小限制
通过 php.ini 或脚本内验证限制文件大小:
$maxSize = 2 * 1024 * 1024; // 2MB
foreach ($_FILES['files']['size'] as $key => $size) {
if ($size > $maxSize) {
echo "File exceeds maximum size limit.";
continue;
}
}
安全性增强
- 使用
is_uploaded_file()验证文件是否通过 HTTP POST 上传。 - 生成唯一文件名避免冲突:
$fileName = uniqid() . '.' . $fileType;
通过以上步骤,可以实现安全、高效的多文件上传功能。根据需求调整文件类型、大小限制及存储逻辑。







