不使用数据库制作一个php文件传输系统只用一个文件要求上传时只能上传一个文件格式不限上传后往dbtxt存储其名称和id并且解决名称相同的问题下载时用户输入id即可从dbtxt抽取文件进行下载每个文件只能下载一次下载时改成原名称相同下载后要求删除文件上传完成之后显示id上传文件限制2000MB页面显示所有未下载的文件设置后台储存不超过3000MB显示剩余内存、已用内存和总内存
以下是一个简单的实现上述要求的PHP文件传输系统的示例代码:
<?php
// 检查上传文件是否存在
if(isset($_FILES['file'])) {
$file = $_FILES['file'];
// 检查文件上传错误
if ($file['error'] === 0) {
// 生成唯一的文件ID
$id = uniqid();
// 获取文件名称和扩展名
$fileName = $file['name'];
$fileExt = pathinfo($fileName, PATHINFO_EXTENSION);
// 处理文件名冲突
while(file_exists($id . '.' . $fileExt)) {
$id = uniqid();
}
// 移动上传文件到指定目录
move_uploaded_file($file['tmp_name'], 'uploads/' . $id . '.' . $fileExt);
// 将文件信息写入db.txt
$fileInfo = "$id|$fileName";
file_put_contents('db.txt', $fileInfo . PHP_EOL, FILE_APPEND);
// 输出文件ID
echo "文件上传成功,文件ID为: $id";
}
}
// 下载文件
if (isset($_GET['id'])) {
$id = $_GET['id'];
// 读取db.txt文件
$fileLines = file('db.txt');
foreach($fileLines as $line) {
$fileInfo = explode('|', $line);
$fileId = $fileInfo[0];
$fileName = $fileInfo[1];
// 检查文件ID是否匹配
if ($fileId == $id) {
// 检查文件是否已下载
if (!file_exists('downloads/' . $fileName)) {
// 复制文件到下载目录
copy('uploads/' . $fileId . '.' . pathinfo($fileName, PATHINFO_EXTENSION), 'downloads/' . $fileName);
// 删除上传文件
unlink('uploads/' . $fileId . '.' . pathinfo($fileName, PATHINFO_EXTENSION));
// 输出下载链接
echo "文件下载成功,请点击<a href='downloads/$fileName'>此处</a>下载文件。";
// 从db.txt中移除文件信息
$fileLines = array_diff($fileLines, [$line]);
file_put_contents('db.txt', implode('', $fileLines));
} else {
echo "该文件已被下载。";
}
break;
}
}
}
// 计算已用内存
$usedMemory = 0;
$fileLines = file('db.txt');
foreach($fileLines as $line) {
$fileInfo = explode('|', $line);
$fileId = $fileInfo[0];
$fileExt = pathinfo($fileInfo[1], PATHINFO_EXTENSION);
$fileSize = filesize('uploads/' . $fileId . '.' . $fileExt);
$usedMemory += $fileSize;
}
// 计算剩余内存
$totalMemory = 3000000000; // 3000MB
$remainingMemory = $totalMemory - $usedMemory;
// 输出剩余内存、已用内存和总内存
echo "剩余内存: " . round($remainingMemory / 1048576, 2) . "MB<br>";
echo "已用内存: " . round($usedMemory / 1048576, 2) . "MB<br>";
echo "总内存: " . round($totalMemory / 1048576, 2) . "MB<br>";
// 显示所有未下载的文件
echo "<h2>未下载的文件:</h2>";
foreach($fileLines as $line) {
$fileInfo = explode('|', $line);
$fileId = $fileInfo[0];
$fileName = $fileInfo[1];
echo "<p>文件ID: $fileId, 文件名: $fileName</p>";
}
?>
<!DOCTYPE html>
<html>
<head>
<title>文件传输系统</title>
</head>
<body>
<h1>文件上传</h1>
<form method="POST" enctype="multipart/form-data">
<input type="file" name="file" required>
<button type="submit">上传</button>
</form>
<h1>文件下载</h1>
<form method="GET">
<input type="text" name="id" placeholder="请输入文件ID" required>
<button type="submit">下载</button>
</form>
</body>
</html>
在上述代码中,上传的文件会保存在uploads目录下,已下载的文件会保存在downloads目录下。文件信息会存储在db.txt文件中,每行表示一个文件,格式为id|filename。通过读取db.txt文件可以获取文件信息。
请注意,这只是一个简单的示例,没有进行过多的错误处理和安全性检查,仅供参考。在实际应用中,建议使用数据库来管理文件信息,并进行更严格的验证和安全性措施
原文地址: https://www.cveoy.top/t/topic/ioiC 著作权归作者所有。请勿转载和采集!