-软件表 CREATE TABLE `software` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100) NOT NULL COMMENT '软件名称', `version` varchar(20) NOT NULL COMMENT '版本号', `category_id` int(11) NOT NULL COMMENT '分类ID', `description` text COMMENT '软件描述', `download_url` varchar(255) NOT NULL COMMENT '下载链接', `file_size` varchar(20) NOT NULL COMMENT '文件大小', `system` varchar(50) NOT NULL COMMENT '支持系统(Win/Mac/Linux)', `md5` varchar(32) DEFAULT NULL COMMENT '文件MD5值', `views` int(11) DEFAULT '0' COMMENT '下载次数', `created_at` timestamp DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ); -分类表 CREATE TABLE `category` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL COMMENT '分类名称', `parent_id` int(11) DEFAULT '0' COMMENT '父级分类ID', PRIMARY KEY (`id`) ); -用户评论表 CREATE TABLE `comment` ( `id` int(11) NOT NULL AUTO_INCREMENT, `software_id` int(11) NOT NULL COMMENT '软件ID', `username` varchar(50) NOT NULL, `content` text NOT NULL, `created_at` timestamp DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) );
// index.php
<?php
include 'config.php';
$page = isset($_GET['page']) ? $_GET['page'] : 1;
$limit = 20;
$offset = ($page 1) * $limit;
// 获取最新软件
$stmt = $pdo->prepare("SELECT * FROM software ORDER BY created_at DESC LIMIT ? OFFSET ?");
$stmt->execute([$limit, $offset]);
$softwares = $stmt->fetchAll();
// 分类列表
$categories = $pdo->query("SELECT * FROM category WHERE parent_id=0")->fetchAll();
?>
<!DOCTYPE html>
<html>
<head>软件下载站</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-4">
<!-分类导航 -->
<nav class="navbar navbar-expand-lg">
<div class="collapse navbar-collapse">
<ul class="navbar-nav">
<?php foreach ($categories as $cat): ?>
<li class="nav-item"><a class="nav-link" href="category.php?id=<?=$cat['id']?>"><?=$cat['name']?></a></li>
<?php endforeach; ?>
</ul>
</div>
</nav>
<!-软件列表 -->
<div class="row">
<?php foreach ($softwares as $sw): ?>
<div class="col-md-4 mb-3">
<div class="card">
<div class="card-body">
<h5 class="card-title"><?=$sw['name']?> <?=$sw['version']?></h5>
<p class="card-text"><?=$sw['description']?></p>
<a href="download.php?id=<?=$sw['id']?>" class="btn btn-primary">下载</a>
<small class="text-muted">下载次数: <?=$sw['views']?></small>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
<!-分页 -->
<nav><ul class="pagination justify-content-center"><?php echo paginate($page, $limit); ?></ul></nav>
</div>
</body>
</html>
// download.php
<?php
include 'config.php';
$id = $_GET['id'];
$stmt = $pdo->prepare("SELECT * FROM software WHERE id=?");
$stmt->execute([$id]);
$software = $stmt->fetch();
// 防盗链检查
if (!isset($_SERVER['HTTP_REFERER']) || strpos($_SERVER['HTTP_REFERER'], 'yourdomain.com') === false) {
die('禁止直接访问下载链接!');
}
// 更新下载次数
$pdo->prepare("UPDATE software SET views=views+1 WHERE id=?")->execute([$id]);
// 跳转到真实下载地址
header("Location: " . $software['download_url']);
exit;
?>
// detail.php
<?php
$id = $_GET['id'];
$stmt = $pdo->prepare("SELECT * FROM software WHERE id=?");
$stmt->execute([$id]);
$software = $stmt->fetch();
// 获取评论
$comments = $pdo->prepare("SELECT * FROM comment WHERE software_id=? ORDER BY created_at DESC");
$comments->execute([$id]);
?>
<div class="container mt-4">
<h1><?=$software['name']?> <?=$software['version']?></h1>
<p>系统要求: <?=$software['system']?></p>
<p>文件大小: <?=$software['file_size']?></p>
<p>MD5: <?=$software['md5']?></p>
<a href="download.php?id=<?=$id?>" class="btn btn-success">立即下载</a>
<!-评论区 -->
<div class="mt-4">
<h3>用户评论</h3>
<?php foreach ($comments as $comment): ?>
<div class="card mb-2">
<div class="card-body">
<h6><?=$comment['username']?> <small><?=$comment['created_at']?></small></h6>
<p><?=$comment['content']?></p>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
文件上传安全(如需用户上传):

// 检查文件类型
$allowed = ['exe', 'dmg', 'deb', 'rpm'];
$ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
if (!in_array($ext, $allowed)) die('不允许的文件类型!');
// 生成随机文件名
$newName = uniqid() . '.' . $ext;
move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $newName);
XSS防护:
// 输出前转义HTML echo htmlspecialchars($user_input);
SQL注入防护:
使用PDO预处理语句(如示例代码)

搜索功能:
$keyword = $_GET['keyword'];
$stmt = $pdo->prepare("SELECT * FROM software WHERE name LIKE ?");
$stmt->execute(["%$keyword%"]);
多语言支持:
gettext 或自定义语言包CDN加速:

// 下载链接改为CDN地址 $download_url = "https://cdn.yourdomain.com/" . $file_path;
后台管理:
服务器环境:
安全配置:
# Nginx防盗链配置
location /download/ {
valid_referers none blocked yourdomain.com;
if ($invalid_referer) {
return 403;
}
}
定期备份:
mysqldump 自动备份数据库重要提醒:
- 下载站需遵守版权法规,确保软件资源合法授权
- 提供MD5/SHA1校验值增强可信度
- 使用HTTPS协议保护用户数据传输安全
此源码框架已覆盖下载站核心功能,可根据实际需求扩展用户系统、支付接口、API接口等模块。