PHP实现简易在线文件共享系统

admin 2025-01-14 657 0

在这个信息爆炸的时代,文件共享已成为日常工作和生活中不可或缺的一部分。本文将带你一步步用PHP搭建一个简易的在线文件共享系统,让你轻松实现文件的上传与下载。

PHP实现简易在线文件共享系统

项目准备

首先,确保你的开发环境已安装以下工具:

  • PHP:用于后端逻辑处理。
  • MySQL:用于存储文件信息。
  • Apache/Nginx:作为Web服务器。

此外,你还需要一个文本编辑器(如VSCode)来编写代码。

数据库设计

为了管理文件信息,我们需要一个简单的数据库表。以下是创建表的SQL语句:

CREATE TABLE files (
    id INT AUTO_INCREMENT PRIMARY KEY,
    filename VARCHAR(255) NOT NULL,
    filepath VARCHAR(255) NOT NULL,
    upload_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

这个表包含四个字段:id(主键)、filename(文件名)、filepath(文件路径)和upload_time(上传时间)。

后端实现

文件上传

首先,创建一个PHP文件upload.php,用于处理文件上传逻辑:

<?php
// 连接数据库
$conn = new mysqli("localhost", "username", "password", "database");

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $filename = $_FILES['file']['name'];
    $filepath = "uploads/" . basename($filename);

    if (move_uploaded_file($_FILES['file']['tmp_name'], $filepath)) {
        $sql = "INSERT INTO files (filename, filepath) VALUES ('$filename', '$filepath')";
        if ($conn->query($sql) === TRUE) {
            echo "File uploaded successfully.";
        } else {
            echo "Error: " . $sql . "<br>" . $conn->error;
        }
    } else {
        echo "Failed to upload file.";
    }
}
$conn->close();
?>

文件列表展示

接下来,创建一个PHP文件index.php,用于展示已上传的文件列表:

<?php
$conn = new mysqli("localhost", "username", "password", "database");

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT id, filename, upload_time FROM files";
$result = $conn->query($sql);
?>

<!DOCTYPE html>
<html>
<head>
    <title>File Sharing System</title>
</head>
<body>
    <h1>Available Files</h1>
    <table border="1">
        <tr>
            <th>ID</th>
            <th>Filename</th>
            <th>Upload Time</th>
            <th>Action</th>
        </tr>
        <?php while($row = $result->fetch_assoc()): ?>
        <tr>
            <td><?php echo $row['id']; ?></td>
            <td><?php echo $row['filename']; ?></td>
            <td><?php echo $row['upload_time']; ?></td>
            <td><a href="download.php?id=<?php echo $row['id']; ?>">Download</a></td>
        </tr>
        <?php endwhile; ?>
    </table>
    <form action="upload.php" method="post" enctype="multipart/form-data">
        <input type="file" name="file" required>
        <button type="submit">Upload</button>
    </form>
</body>
</html>

<?php
$conn->close();
?>

文件下载

最后,创建一个PHP文件download.php,用于处理文件下载请求:

<?php
$conn = new mysqli("localhost", "username", "password", "database");

if ($_SERVER['REQUEST_METHOD'] == 'GET') {
    $id = $_GET['id'];
    $sql = "SELECT filepath FROM files WHERE id = $id";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
        $row = $result->fetch_assoc();
        $filepath = $row['filepath'];
        if (file_exists($filepath)) {
            header('Content-Description: File Transfer');
            header('Content-Type: application/octet-stream');
            header('Content-Disposition: attachment; filename="'.basename($filepath).'"');
            header('Expires: 0');
            header('Cache-Control: must-revalidate');
            header('Pragma: public');
            header('Content-Length: ' . filesize($filepath));
            readfile($filepath);
            exit;
        }
    }
}

$conn->close();
?>

总结

通过以上步骤,我们成功搭建了一个简易的在线文件共享系统。用户可以上传文件,查看文件列表,并下载所需的文件。

评论(0)