用php写一个网盘
时间: 2023-07-04 22:19:26 浏览: 51
要用 PHP 写一个网盘,需要结合数据库和文件系统的操作,实现文件上传、下载、存储、分享、权限管理等功能。以下是一个简单的 PHP 网盘代码示例:
```php
<?php
// 连接数据库
$conn = mysqli_connect("localhost", "username", "password", "database");
// 处理文件上传
if ($_FILES["file"]["error"] == UPLOAD_ERR_OK && $_POST["action"] == "upload") {
$filename = $_FILES["file"]["name"];
$filesize = $_FILES["file"]["size"];
$filetype = $_FILES["file"]["type"];
$filetmp = $_FILES["file"]["tmp_name"];
$filehash = md5_file($filetmp);
// 检查文件是否已存在
$query = "SELECT * FROM files WHERE filehash = '$filehash'";
$result = mysqli_query($conn, $query);
if (mysqli_num_rows($result) > 0) {
echo "文件已存在!";
} else {
// 存储文件到服务器
$filepath = "uploads/" . $filename;
move_uploaded_file($filetmp, $filepath);
// 存储文件信息到数据库
$query = "INSERT INTO files (filename, filesize, filetype, filehash, filepath) VALUES ('$filename', $filesize, '$filetype', '$filehash', '$filepath')";
mysqli_query($conn, $query);
echo "文件上传成功!";
}
}
// 处理文件下载
if ($_GET["action"] == "download" && $_GET["id"]) {
$id = $_GET["id"];
// 查询文件信息
$query = "SELECT * FROM files WHERE id = $id";
$result = mysqli_query($conn, $query);
$row = mysqli_fetch_assoc($result);
// 下载文件
$filepath = $row["filepath"];
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"" . $row["filename"] . "\"");
readfile($filepath);
}
// 处理文件列表
$query = "SELECT * FROM files";
$result = mysqli_query($conn, $query);
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>My Cloud</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<header>
<h1>My Cloud</h1>
<nav>
<ul>
<li><a href="#">上传文件</a></li>
<li><a href="#">我的文件</a></li>
<li><a href="#">分享文件</a></li>
</ul>
</nav>
</header>
<main>
<section>
<h2>上传文件</h2>
<form method="post" enctype="multipart/form-data">
<input type="hidden" name="action" value="upload">
<input type="file" name="file">
<button type="submit">上传</button>
</form>
</section>
<section>
<h2>我的文件</h2>
<ul>
<?php while ($row = mysqli_fetch_assoc($result)): ?>
<li>
<a href="?action=download&id=<?php echo $row["id"]; ?>"><?php echo $row["filename"]; ?></a>
</li>
<?php endwhile; ?>
</ul>
</section>
</main>
<footer>
<p>版权所有 © 2021 My Cloud</p>
</footer>
</body>
</html>
```
其中,`style.css` 是与 HTML 代码对应的样式表文件,用来设置页面的样式、布局和响应式设计等。
需要注意的是,这只是一个简单的示例,实际的网盘需要更多的功能和安全性,建议您深入学习相关知识后再进行实践。