当前位置:首页 > PHP

php实现网盘文件夹

2026-02-14 05:52:36PHP

php实现网盘文件夹

php实现网盘文件夹

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 登录功能实现 数据库连接与用户表创建 创建一个数据库连接文件 db.php,用于管理数据库连接。MySQL 示例代码如下: <?php $host = 'localhost'; $db…

php购物车实现

php购物车实现

PHP购物车实现方法 使用PHP实现购物车功能可以通过多种方式完成,以下是几种常见的实现方法: Session存储购物车数据 利用PHP的$_SESSION超全局变量存储购物车数据是最简单的方法。用…

php 实现接口

php 实现接口

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

php 实现秒杀

php 实现秒杀

PHP 实现秒杀的关键技术 秒杀系统需要解决高并发、超卖、性能瓶颈等问题。以下是实现秒杀的核心方案: 使用 Redis 预减库存 将商品库存提前加载到 Redis 中,通过原子操作保证库存准确性:…

php实现博客

php实现博客

使用PHP实现博客系统 数据库设计 创建数据库表存储博客文章和用户信息。常见的表包括posts(文章)和users(用户)。 CREATE TABLE users ( id INT AUTO…

php 实现单点登录

php 实现单点登录

PHP 实现单点登录的方法 单点登录(SSO)允许用户通过一次登录访问多个相互信任的系统。以下是基于 PHP 的实现方案: 基于共享 Session 的方案 在同一个主域名下的子域名间可以通过共享…