当前位置:首页 > PHP

php实现网盘文件夹

2026-02-14 05:52:36PHP

PHP实现网盘文件夹功能

数据库设计

创建一个数据库表存储文件夹和文件信息,示例结构如下:

CREATE TABLE `files` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `path` varchar(255) NOT NULL,
  `type` enum('file','folder') NOT NULL,
  `size` bigint(20) DEFAULT 0,
  `parent_id` int(11) DEFAULT NULL,
  `user_id` int(11) NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
  PRIMARY KEY (`id`)
);

创建文件夹功能

function createFolder($folderName, $parentId = null, $userId) {
    $db = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');

    // 检查同名文件夹是否已存在
    $stmt = $db->prepare("SELECT id FROM files WHERE name = ? AND parent_id = ? AND user_id = ? AND type = 'folder'");
    $stmt->execute([$folderName, $parentId, $userId]);

    if($stmt->fetch()) {
        return ['success' => false, 'message' => '文件夹已存在'];
    }

    // 插入新文件夹记录
    $stmt = $db->prepare("INSERT INTO files (name, path, type, parent_id, user_id) VALUES (?, ?, 'folder', ?, ?)");
    $path = $parentId ? getFolderPath($parentId).'/'.$folderName : $folderName;
    $success = $stmt->execute([$folderName, $path, $parentId, $userId]);

    return ['success' => $success, 'message' => $success ? '文件夹创建成功' : '创建失败'];
}

获取文件夹路径

function getFolderPath($folderId) {
    $db = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
    $stmt = $db->prepare("SELECT path FROM files WHERE id = ?");
    $stmt->execute([$folderId]);
    $result = $stmt->fetch();
    return $result ? $result['path'] : '';
}

列出文件夹内容

function listFolderContents($folderId, $userId) {
    $db = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
    $stmt = $db->prepare("SELECT * FROM files WHERE parent_id = ? AND user_id = ? ORDER BY type DESC, name ASC");
    $stmt->execute([$folderId, $userId]);
    return $stmt->fetchAll(PDO::FETCH_ASSOC);
}

文件上传处理

function uploadFile($file, $folderId, $userId) {
    $targetDir = "uploads/".$userId."/";
    if(!file_exists($targetDir)) {
        mkdir($targetDir, 0777, true);
    }

    $fileName = basename($file["name"]);
    $targetPath = $targetDir . uniqid() . '_' . $fileName;

    if(move_uploaded_file($file["tmp_name"], $targetPath)) {
        $db = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
        $path = $folderId ? getFolderPath($folderId).'/'.$fileName : $fileName;
        $stmt = $db->prepare("INSERT INTO files (name, path, type, size, parent_id, user_id) VALUES (?, ?, 'file', ?, ?, ?)");
        $stmt->execute([$fileName, $path, $file["size"], $folderId, $userId]);
        return true;
    }
    return false;
}

前端界面示例

<!-- 文件夹创建表单 -->
<form action="create_folder.php" method="post">
    <input type="text" name="folder_name" placeholder="文件夹名称" required>
    <input type="hidden" name="parent_id" value="<?= $currentFolderId ?>">
    <button type="submit">创建文件夹</button>
</form>

<!-- 文件上传表单 -->
<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="file" required>
    <input type="hidden" name="folder_id" value="<?= $currentFolderId ?>">
    <button type="submit">上传文件</button>
</form>

<!-- 文件夹内容列表 -->
<ul>
    <?php foreach($folderContents as $item): ?>
    <li>
        <?= $item['type'] === 'folder' ? '📁' : '📄' ?>
        <?= htmlspecialchars($item['name']) ?>
        <?= $item['type'] === 'file' ? '(' . formatSize($item['size']) . ')' : '' ?>
    </li>
    <?php endforeach; ?>
</ul>

安全注意事项

  • 验证用户权限确保用户只能访问自己的文件
  • 对用户输入进行过滤和转义防止SQL注入
  • 文件上传时检查文件类型和大小限制
  • 使用预处理语句处理数据库查询
  • 对文件路径进行安全处理防止目录遍历攻击

性能优化建议

  • 对大文件使用分块上传
  • 实现文件秒传功能(检查文件哈希值)
  • 对频繁访问的文件夹内容进行缓存
  • 使用CDN加速文件下载
  • 对数据库查询添加适当的索引

php实现网盘文件夹

标签: 文件夹php
分享给朋友:

相关文章

php实现分页

php实现分页

PHP实现分页的基本方法 使用原生PHP实现分页功能需要结合数据库查询和HTML展示。以下是核心实现步骤: 数据库查询与分页逻辑 // 连接数据库 $conn = new mysqli('lo…

php实现增删改查

php实现增删改查

以下是在PHP中实现增删改查(CRUD)操作的详细方法,以MySQL数据库为例: 数据库连接配置 创建config.php文件存储数据库连接信息: <?php $host = 'loca…

php实现

php实现

PHP 实现的基本方法 PHP 是一种服务器端脚本语言,广泛用于 Web 开发。以下是 PHP 实现的一些常见方法。 变量与数据类型 PHP 变量以 $ 开头,支持多种数据类型: $n…

php 实现登录

php 实现登录

PHP 登录功能实现 使用 PHP 实现登录功能通常需要结合数据库验证和会话管理。以下是一个基本的登录实现流程: 数据库准备 创建用户表存储用户名和密码(建议使用哈希加密): CREATE T…

php 登录实现

php 登录实现

PHP 登录实现 PHP 登录功能通常包括用户认证、会话管理和安全性措施。以下是实现 PHP 登录功能的关键步骤。 数据库准备 创建一个用户表存储用户信息,通常包括用户名、密码(加密存储)和其他必要…

php 实现接口

php 实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不包含具体的实现。类可以实现(implement)接口,并必须实现接口中定义的所有方法。 定义接口 接口通…