119 lines
3.8 KiB
PHP
119 lines
3.8 KiB
PHP
<?php
|
|
// 数据库连接和初始化
|
|
|
|
$data_dir = __DIR__ . '/../data';
|
|
$apps_dir = $data_dir . '/apps';
|
|
$uploads_dir = $data_dir . '/uploads';
|
|
$db_path = $data_dir . '/database.db';
|
|
$is_new_db = !file_exists($db_path);
|
|
|
|
// 自动创建目录
|
|
if (!is_dir($data_dir)) {
|
|
if (!mkdir($data_dir, 0777, true)) {
|
|
die("错误: 无法创建 data 目录。请手动创建并设置权限: mkdir -p data && chmod 777 data");
|
|
}
|
|
@chmod($data_dir, 0777);
|
|
}
|
|
|
|
if (!is_dir($apps_dir)) {
|
|
if (!mkdir($apps_dir, 0777, true)) {
|
|
die("错误: 无法创建 data/apps 目录");
|
|
}
|
|
@chmod($apps_dir, 0777);
|
|
}
|
|
|
|
if (!is_dir($uploads_dir)) {
|
|
if (!mkdir($uploads_dir, 0777, true)) {
|
|
die("错误: 无法创建 data/uploads 目录");
|
|
}
|
|
@chmod($uploads_dir, 0777);
|
|
}
|
|
|
|
// 检查目录是否可写
|
|
if (!is_writable($data_dir)) {
|
|
die("错误: data 目录不可写。请设置权限: chmod 777 data");
|
|
}
|
|
|
|
// 如果数据库文件存在但不可写
|
|
if (file_exists($db_path) && !is_writable($db_path)) {
|
|
die("错误: 数据库文件不可写。请设置权限: chmod 666 data/database.db");
|
|
}
|
|
|
|
try {
|
|
$db = new PDO('sqlite:' . $db_path);
|
|
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
|
|
|
// 如果是新数据库,初始化表结构
|
|
if ($is_new_db) {
|
|
// 创建 apps 表
|
|
$db->exec("
|
|
CREATE TABLE IF NOT EXISTS apps (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
filename TEXT NOT NULL,
|
|
original_name TEXT NOT NULL,
|
|
version TEXT,
|
|
description TEXT,
|
|
upload_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
file_size INTEGER
|
|
)
|
|
");
|
|
|
|
// 创建 config 表
|
|
$db->exec("
|
|
CREATE TABLE IF NOT EXISTS config (
|
|
key TEXT PRIMARY KEY,
|
|
value TEXT
|
|
)
|
|
");
|
|
|
|
// 创建 users 表
|
|
$db->exec("
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
username TEXT UNIQUE NOT NULL,
|
|
password TEXT NOT NULL,
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
)
|
|
");
|
|
|
|
// 插入默认配置
|
|
$defaults = [
|
|
['site_title', 'OPS 运营管理系统'],
|
|
['site_description', '点击下方按钮下载移动端 APP'],
|
|
['logo_path', 'logo.png']
|
|
];
|
|
|
|
$stmt = $db->prepare("INSERT INTO config (key, value) VALUES (?, ?)");
|
|
foreach ($defaults as $config) {
|
|
$stmt->execute($config);
|
|
}
|
|
|
|
// 插入默认管理员账号(密码使用 password_hash 加密)
|
|
$stmt = $db->prepare("INSERT INTO users (username, password) VALUES (?, ?)");
|
|
$stmt->execute(['admin', password_hash('admin', PASSWORD_DEFAULT)]);
|
|
|
|
// 设置新创建的数据库文件权限
|
|
@chmod($db_path, 0666);
|
|
}
|
|
|
|
// 数据库升级:如果 users 表不存在,创建它并迁移默认用户
|
|
$tables = $db->query("SELECT name FROM sqlite_master WHERE type='table' AND name='users'")->fetchAll();
|
|
if (empty($tables)) {
|
|
$db->exec("
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
username TEXT UNIQUE NOT NULL,
|
|
password TEXT NOT NULL,
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
)
|
|
");
|
|
|
|
// 插入默认管理员账号
|
|
$stmt = $db->prepare("INSERT OR IGNORE INTO users (username, password) VALUES (?, ?)");
|
|
$stmt->execute(['admin', password_hash('admin', PASSWORD_DEFAULT)]);
|
|
}
|
|
|
|
} catch (PDOException $e) {
|
|
die("数据库连接失败: " . $e->getMessage() . "<br><br>请确保:<br>1. data 目录存在且可写 (chmod 777 data)<br>2. Web 服务器用户有权限创建文件");
|
|
}
|