php多文件上传下载示例分享


在PHP中处理多文件上传和下载,你可以通过HTML表单来上传文件,并使用PHP脚本来处理这些文件。以下是一个简单的示例,展示了如何实现多文件上传和下载的基本功能。

### HTML 表单(用于上传)

首先,你需要一个HTML表单来允许用户选择多个文件上传。


<!DOCTYPE html>
<html>
<head>
    <title>多文件上传</title>
</head>
<body>

<form action="upload.php" method="post" enctype="multipart/form-data">
    选择文件上传:
    <input type="file" name="files[]" multiple>
    <input type="submit" value="上传文件">
</form>

</body>
</html>

### PHP 脚本(处理上传)

接下来,是处理文件上传的PHP脚本(`upload.php`)。


<?php
$target_dir = "uploads/"; // 指定上传目录
$target_file = $target_dir . basename($_FILES["files"]["name"][$key]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

// 检查目录是否存在
if(!file_exists($target_dir)) {
    mkdir($target_dir, 0777, true);
}

// 循环处理每个文件
for ($i = 0; $i < count($_FILES["files"]["name"]); $i++) {
    $key = $i;
    $check = getimagesize($_FILES["files"]["tmp_name"][$key]);
    if($check !== false) {
        echo "文件 " . htmlspecialchars(basename($_FILES["files"]["name"][$key])). " 是一个图片 - " . $check["mime"] . ".<br>";
        $uploadOk = 1;
    } else {
        echo "文件 " . htmlspecialchars(basename($_FILES["files"]["name"][$key])). " 不是一个图片.<br>";
        $uploadOk = 0;
    }

    // 尝试上传文件
    if ($uploadOk == 0) {
        echo "抱歉,你的文件未被上传。";
    // 如果一切正常,尝试上传文件
    } else {
        if (move_uploaded_file($_FILES["files"]["tmp_name"][$key], $target_dir . basename($_FILES["files"]["name"][$key]))) {
            echo "文件 ". htmlspecialchars(basename($_FILES["files"]["name"][$key])). " 已被上传。";
        } else {
            echo "抱歉,上传文件时出现了错误。";
        }
    }
}
?>

**注意**:上面的PHP脚本仅作为示例,并未包含所有必要的错误处理和安全性检查(如文件类型检查、文件大小限制等)。在实际应用中,你应该添加这些检查来确保系统的安全性。

### 文件下载

对于文件下载,你可以创建一个简单的PHP脚本来读取文件并将其发送到浏览器。


<?php
$file = 'uploads/yourfile.jpg'; // 指定要下载的文件路径

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    readfile($file);
    exit;
} else {
    echo "文件不存在。";
}
?>

在这个下载脚本中,你需要将`$file`变量的值更改为实际要下载的文件路径。这个脚本会告诉浏览器这是一个文件下载,而不是在浏览器中直接打开它,并发送文件内容到浏览器。