STEP #1

(1/2)

此处切换ai服务商,可对比多家ai的回复,取最优解。

上一步下一步关闭
酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

写一个主机控制面板系统 语言方向:PHP 系统环境:Linux

# PHP 主机控制面板系统设计 ## 基础架构设计 ```php <?php // 定义基础配置 define('PANEL_ROOT', __DIR__); define('DB_HOST', 'localhost'); define('DB_USER', 'panel_admin'); define('DB_PASS', 'secure_password'); define('DB_NAME', 'hosting_panel'); // 自动加载类 spl_autoload_register(function ($class) { include PANEL_ROOT . '/classes/' . $class . '.php'; }); // 初始化会话 session_start(); // 错误报告设置 error_reporting(E_ALL); ini_set('display_errors', 1); ``` ## 数据库结构 (MySQL) ```sql -- 用户表 CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, email VARCHAR(100) NOT NULL UNIQUE, role ENUM('admin', 'reseller', 'user') NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, status ENUM('active', 'suspended', 'pending') DEFAULT 'pending' ); -- 主机账户表 CREATE TABLE hosting_accounts ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, domain VARCHAR(100) NOT NULL UNIQUE, package_id INT NOT NULL, disk_quota INT NOT NULL, -- MB bandwidth INT NOT NULL, -- MB created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, expires_at DATETIME, status ENUM('active', 'suspended', 'pending') DEFAULT 'pending', FOREIGN KEY (user_id) REFERENCES users(id) ); -- 主机套餐表 CREATE TABLE hosting_packages ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, disk_space INT NOT NULL, -- MB bandwidth INT NOT NULL, -- MB max_ftp INT DEFAULT 1, max_email INT DEFAULT 1, max_db INT DEFAULT 1, price DECIMAL(10,2) NOT NULL ); ``` ## 核心功能类 ```php // Database.php - 数据库连接类 class Database { private $connection; public function __construct() { $this->connection = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME); if ($this->connection->connect_error) { die("Database connection failed: " . $this->connection->connect_error); } } public function query($sql) { return $this->connection->query($sql); } public function escape($value) { return $this->connection->real_escape_string($value); } public function getInsertId() { return $this->connection->insert_id; } } // User.php - 用户管理类 class User { private $db; public function __construct() { $this->db = new Database(); } public function register($username, $password, $email, $role = 'user') { $hashedPassword = password_hash($password, PASSWORD_DEFAULT); $username = $this->db->escape($username); $email = $this->db->escape($email); $sql = "INSERT INTO users (username, password, email, role) VALUES ('$username', '$hashedPassword', '$email', '$role')"; return $this->db->query($sql); } public function login($username, $password) { $username = $this->db->escape($username); $result = $this->db->query("SELECT * FROM users WHERE username='$username' LIMIT 1"); if ($result->num_rows == 1) { $user = $result->fetch_assoc(); if (password_verify($password, $user['password'])) { $_SESSION['user_id'] = $user['id']; $_SESSION['username'] = $user['username']; $_SESSION['role'] = $user['role']; return true; } } return false; } } // HostingManager.php - 主机账户管理 class HostingManager { private $db; public function __construct() { $this->db = new Database(); } public function createAccount($userId, $domain, $packageId) { // 获取套餐详情 $package = $this->getPackage($packageId); if (!$package) return false; $domain = $this->db->escape($domain); $userId = (int)$userId; // 创建Linux账户 (伪代码) $this->createLinuxAccount($userId, $domain); // 创建数据库记录 $sql = "INSERT INTO hosting_accounts (user_id, domain, package_id, disk_quota, bandwidth) VALUES ($userId, '$domain', $packageId, {$package['disk_space']}, {$package['bandwidth']})"; return $this->db->query($sql); } private function createLinuxAccount($userId, $domain) { // 实际实现会调用Linux系统命令 // 例如: exec("useradd -m -d /home/$username $username"); // 设置quota: exec("setquota -u $username $diskQuota $diskQuota 0 0 /home"); return true; } public function getPackage($id) { $id = (int)$id; $result = $this->db->query("SELECT * FROM hosting_packages WHERE id=$id"); return $result->num_rows ? $result->fetch_assoc() : null; } } ``` ## 前端界面示例 (HTML/CSS) ```html <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>主机控制面板</title> <style> body { font-family: Arial, sans-serif; margin: 0; padding: 0; background-color: #f5f5f5; } .header { background-color: #2c3e50; color: white; padding: 15px; display: flex; justify-content: space-between; } .sidebar { width: 200px; background-color: #34495e; color: white; height: calc(100vh - 60px); float: left; } .sidebar ul { list-style: none; padding: 0; } .sidebar li { padding: 10px 15px; border-bottom: 1px solid #2c3e50; } .sidebar li:hover { background-color: #2c3e50; cursor: pointer; } .main-content { margin-left: 200px; padding: 20px; } .card { background: white; border-radius: 5px; box-shadow: 0 2px 5px rgba(0,0,0,0.1); padding: 20px; margin-bottom: 20px; } </style> </head> <body> <div class="header"> <h1>主机控制面板</h1> <div> <?php if (isset($_SESSION['username'])): ?> 欢迎, <?php echo htmlspecialchars($_SESSION['username']); ?> | <a href="logout.php" style="color: white;">退出</a> <?php endif; ?> </div> </div> <div class="sidebar"> <ul> <li>控制台</li> <li>网站管理</li> <li>数据库</li> <li>FTP账户</li> <li>电子邮件</li> <li>文件管理器</li> <li>备份</li> <li>设置</li> </ul> </div> <div class="main-content"> <div class="card"> <h2>服务器状态</h2> <p>CPU使用率: 25%</p> <p>内存使用: 1.2GB / 4GB</p> <p>磁盘空间: 50GB / 200GB</p> </div> <div class="card"> <h2>您的账户</h2> <p>域名: example.com</p> <p>套餐: 基础型</p> <p>到期时间: 2023-12-31</p> </div> </div> </body> </html> ``` ## 安全考虑 ```php // Security.php - 安全相关功能 class Security { public static function sanitizeInput($input) { if (is_array($input)) { return array_map([self, 'sanitizeInput'], $input); } return htmlspecialchars(strip_tags(trim($input)), ENT_QUOTES, 'UTF-8'); } public static function checkCSRF() { if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) { die('CSRF验证失败'); } } } public static function generateCSRFToken() { if (empty($_SESSION['csrf_token'])) { $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); } return $_SESSION['csrf_token']; } public static function isAdmin() { return isset($_SESSION['role']) && $_SESSION['role'] === 'admin'; } } ``` ## 部署建议 1. 使用Nginx + PHP-FPM组合,性能优于Apache 2. 配置适当的文件权限,确保web用户不能修改核心文件 3. 设置定期备份策略,包括数据库和用户文件 4. 实施防火墙规则,仅开放必要端口 5. 使用Let's Encrypt提供免费SSL证书 ## 扩展功能建议 1. 集成WHMCS等计费系统 2. 添加多语言支持 3. 实现API接口供第三方应用调用 4. 添加服务器监控功能 5. 集成常见应用一键安装(WordPress等) 需要注意的逻辑点: 1. 所有用户输入必须经过严格过滤和转义,防止SQL注入和XSS攻击 2. 文件系统操作必须限制在用户目录内,防止目录遍历攻击 3. 敏感操作如删除账户必须进行二次确认并记录日志 [2025-04-05 07:13:53 | AI写代码神器 | 2345点数解答]

相关提问