From e73bc2fc05e95ebb668a006b2d52868e5e53dc3f Mon Sep 17 00:00:00 2001 From: Leonmmcoset Date: Tue, 8 Jul 2025 20:33:21 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=AE=8C=E5=96=84=E5=AE=89=E8=A3=85?= =?UTF-8?q?=E6=96=87=E6=A1=A3=E5=B9=B6=E6=9B=B4=E6=96=B0=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 详细说明安装步骤,包括环境准备、数据库配置和权限设置 - 更新数据库脚本以使用动态数据库名替代硬编码 - 添加Windows系统下的权限设置说明 - 补充Web服务器配置和初始化管理员账号指引 --- README.md | 289 +++++++++++++++++++++++++++++++++++++++++++++++--- app_store.sql | 16 ++- 2 files changed, 279 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index c48422d..e1cd91a 100644 --- a/README.md +++ b/README.md @@ -45,27 +45,282 @@ app2/ - Node.js (可选,用于前端资源构建) - Web 服务器(如 Apache 或 Nginx) -## 安装步骤 -1. 创建项目目录并将代码复制到该目录下。 -2. 修改 `config.php` 文件,配置 MySQL 数据库信息、管理员账号和邮件服务设置。 -3. 安装依赖包(将自动创建 `vendor` 目录并安装 PHPMailer 等必要依赖): - ```bash - composer install +## 快速启动指南 +对于有经验的开发者,可按照以下步骤快速部署: +```cmd +# 1. 克隆项目并进入目录 +git clone app2 +cd app2 + +# 2. 创建并配置环境文件 +copy config.example.php config.php +# 编辑config.php设置数据库和邮件信息 + +# 3. 创建数据库并导入结构 +mysql -u root -p -e "CREATE DATABASE your_db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" +mysql -u root -p your_db_name < app_store.sql + +# 4. 安装依赖并设置权限 +composer install +icacls files /grant Users:(OI)(CI)W +icacls images /grant Users:(OI)(CI)W + +# 5. 启动开发服务器 +php -S localhost:8000 +``` +访问 http://localhost:8000 开始使用,管理员后台地址:http://localhost:8000/admin + +## 详细安装教程 + +### 1. 环境准备 +确保您的系统满足以下要求: +- PHP 7.4+(推荐PHP 8.0+) +- MySQL 5.7+ 或 MariaDB 10.2+ +- Composer(PHP依赖管理工具) +- Web服务器(Apache/Nginx/IIS)或PHP内置服务器 +- Git(可选,用于版本控制) + +#### 检查PHP环境 +打开命令提示符,输入以下命令验证PHP版本: +```cmd +php -v +# 应显示PHP 7.4.0或更高版本 + +# 检查必要扩展 +php -m | findstr /i "mysqli pdo_mysql json curl fileinfo" +# 确保以上扩展均已安装 +``` + +### 2. 获取项目代码 +选择以下任一方式获取代码: + +#### 方式一:使用Git克隆(推荐) +```cmd +git clone app2 +cd app2 +``` + +#### 方式二:手动下载 +1. 从项目仓库下载ZIP压缩包 +2. 解压到本地目录(如 `d:\app2`) +3. 打开命令提示符,进入项目目录: + ```cmd + cd d:\app2 ``` -4. 登录 MySQL 数据库,创建名为'awa'的数据库: + +### 3. 数据库配置 + +#### 创建数据库 +1. 登录MySQL控制台: + ```cmd + mysql -u root -p + ``` +2. 创建数据库(将`your_db_name`替换为您喜欢的数据库名称): ```sql - CREATE DATABASE awa CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; - ``` -5. 执行 `app_store.sql` 文件导入数据库结构: - ```sql - mysql -u your_username -p awa < app_store.sql - ``` -6. 创建 `files` 和 `images` 目录,并设置正确权限: - ```bash - mkdir -p files images - chmod 755 files images + CREATE DATABASE your_db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + exit ``` +#### 导入数据库结构 +```cmd +mysql -u root -p your_db_name < app_store.sql +``` +> **注意**:请确保在导入前替换命令中的`your_db_name`为您实际创建的数据库名称 + +### 4. 应用配置 + +#### 创建配置文件 +如果项目中存在`config.example.php`: +```cmd +copy config.example.php config.php +``` +如果不存在,请手动创建`config.php`文件并添加以下内容: +```php + +``` + +#### 配置参数说明 +| 参数 | 说明 | 示例值 | +|------|------|--------| +| DB_HOST | 数据库主机地址 | localhost | +| DB_USER | 数据库用户名 | root | +| DB_PASS | 数据库密码 | your_actual_password | +| DB_NAME | 数据库名称 | app_store | +| APP_URL | 应用访问URL | http://localhost/app2 | +| DEBUG_MODE | 调试模式开关 | true/false | + +### 5. 安装依赖 +使用Composer安装项目依赖: +```cmd +composer install +``` +> 如果没有安装Composer,请先从 https://getcomposer.org/ 下载并安装 + +### 6. 设置目录权限 +项目需要对以下目录有写入权限: +- `files/`:存储上传的应用文件 +- `images/`:存储应用截图和图标 + +#### 图形界面方式(推荐) +1. 在文件资源管理器中找到项目目录 +2. 右键点击`files`文件夹,选择**属性** +3. 切换到**安全**选项卡,点击**编辑** +4. 选择当前用户,勾选**写入**权限,点击**确定** +5. 对`images`文件夹执行相同操作 + +#### 命令行方式 +```cmd +icacls files /grant Users:(OI)(CI)W +icacls images /grant Users:(OI)(CI)W +``` + +### 7. 配置Web服务器 + +#### 选项A:使用PHP内置开发服务器(推荐用于开发) +```cmd +php -S localhost:8000 +``` +然后在浏览器中访问:http://localhost:8000 + +#### 选项B:配置Apache服务器 +1. 确保`mod_rewrite`模块已启用 +2. 创建虚拟主机配置: +```apache + + ServerName appstore.local + DocumentRoot "d:/app2" + + Options Indexes FollowSymLinks + AllowOverride All + Require all granted + + +``` +3. 修改`hosts`文件添加:`127.0.0.1 appstore.local` +4. 重启Apache,访问 http://appstore.local + +#### 选项C:配置Nginx服务器 +```nginx +server { + listen 80; + server_name appstore.local; + root d:/app2; + index index.php; + + location / { + try_files $uri $uri/ /index.php?$query_string; + } + + location ~ \.php$ { + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + include fastcgi_params; + } +} +``` + +### 8. 首次使用与安全设置 + +#### 管理员账号初始化 +1. 访问管理员登录页面:http://localhost:8000/admin/login.php +2. 使用默认账号登录: + - 用户名:`admin@example.com`(来自config.php中的ADMIN_EMAIL) + - 密码:`admin123`(来自config.php中的ADMIN_PASSWORD) +3. **重要**:登录后立即点击右上角头像,选择**修改密码**,设置强密码 + +#### 安全建议 +- 生产环境中设置`define('DEBUG_MODE', false);` +- 定期备份数据库 +- 不要将`config.php`提交到版本控制系统 +- 保持PHP和所有依赖包为最新安全版本 + +## 使用教程 + +### 开发者功能 + +#### 注册开发者账号 +1. 访问开发者注册页面:http://localhost:8000/developer/register.php +2. 填写注册信息,提交后系统会发送验证邮件 +3. 点击邮件中的验证链接激活账号 + +#### 上传新应用 +1. 登录开发者后台:http://localhost:8000/developer/login.php +2. 点击**上传新应用**按钮 +3. 填写应用信息: + - 应用名称、描述、版本号 + - 选择应用类别和年龄分级 + - 上传应用图标(推荐尺寸:512x512px) + - 上传应用截图(最多5张) + - 上传应用安装包(支持.zip格式) +4. 点击**提交审核**,等待管理员审核 + +#### 管理应用版本 +1. 在开发者后台点击应用名称进入管理页面 +2. 点击**发布新版本**添加应用更新 +3. 填写版本变更说明和更新内容 +4. 上传新版本安装包 + +### 管理员功能 + +#### 应用审核 +1. 登录管理员后台:http://localhost:8000/admin/login.php +2. 点击**应用审核**菜单 +3. 查看待审核应用列表,点击**查看详情** +4. 审核应用信息和安装包,点击**通过**或**拒绝**并填写反馈 + +#### 管理应用分类 +1. 在管理员后台点击**分类管理** +2. 可以添加、编辑或删除应用分类 +3. 设置分类排序和显示状态 + +#### 系统信息查看 +1. 在管理员后台点击**系统信息** +2. 查看服务器环境、PHP配置和数据库状态 +3. 监控应用总数、开发者数量和文件存储使用情况 + +### API使用指南 + +#### 获取应用列表 +```http +GET /api.php?action=list&page=1&limit=10 +``` +返回JSON格式的应用列表数据 + +#### 获取应用详情 +```http +GET /api.php?action=app&id=1 +``` +返回指定ID的应用详细信息 + +#### API响应格式 +```json +{ + "success": true, + "data": {}, + "message": "操作成功" +} +``` + ## 功能说明 - **首页**:展示最新 App 列表,包含基本信息和评分。 - **App 信息页**:显示 App 详细信息、版本历史、预览图片和用户评价,支持用户评分。 diff --git a/app_store.sql b/app_store.sql index d210802..9473a14 100644 --- a/app_store.sql +++ b/app_store.sql @@ -1,7 +1,5 @@ -- 创建数据库 -- CREATE DATABASE IF NOT EXISTS app_store; -USE awa; - -- 创建APP表 CREATE TABLE IF NOT EXISTS apps ( id INT AUTO_INCREMENT PRIMARY KEY, @@ -104,41 +102,41 @@ CREATE TABLE IF NOT EXISTS app_categories ( ); -- 修改评价表,支持文字评论并关联用户 -SET @exist_ip_address = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'awa' AND TABLE_NAME = 'reviews' AND COLUMN_NAME = 'ip_address'); +SET @exist_ip_address = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'reviews' AND COLUMN_NAME = 'ip_address'); SET @sql = IF(@exist_ip_address > 0, 'ALTER TABLE reviews DROP COLUMN ip_address', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- 检查并删除unique_review索引(如果存在) -SET @exist_unique_review = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = 'awa' AND TABLE_NAME = 'reviews' AND INDEX_NAME = 'unique_review'); +SET @exist_unique_review = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'reviews' AND INDEX_NAME = 'unique_review'); SET @sql = IF(@exist_unique_review > 0, 'ALTER TABLE reviews DROP INDEX unique_review', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- 检查并添加user_id列(如果不存在) -SET @exist_user_id = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'awa' AND TABLE_NAME = 'reviews' AND COLUMN_NAME = 'user_id'); +SET @exist_user_id = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'reviews' AND COLUMN_NAME = 'user_id'); SET @sql = IF(@exist_user_id = 0, 'ALTER TABLE reviews ADD COLUMN user_id INT', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- 检查并添加comment列(如果不存在) -SET @exist_comment = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'awa' AND TABLE_NAME = 'reviews' AND COLUMN_NAME = 'comment'); +SET @exist_comment = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'reviews' AND COLUMN_NAME = 'comment'); SET @sql = IF(@exist_comment = 0, 'ALTER TABLE reviews ADD COLUMN comment TEXT', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- 添加外键约束(如果不存在) -SET @exist_fk = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = 'awa' AND TABLE_NAME = 'reviews' AND COLUMN_NAME = 'user_id' AND CONSTRAINT_NAME = 'fk_reviews_users'); +SET @exist_fk = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'reviews' AND COLUMN_NAME = 'user_id' AND CONSTRAINT_NAME = 'fk_reviews_users'); SET @sql = IF(@exist_fk = 0, 'ALTER TABLE reviews ADD CONSTRAINT fk_reviews_users FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- 检查并添加唯一索引(如果不存在) -SET @exist_unique_index = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = 'awa' AND TABLE_NAME = 'reviews' AND INDEX_NAME = 'unique_user_app_review'); +SET @exist_unique_index = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'reviews' AND INDEX_NAME = 'unique_user_app_review'); SET @sql = IF(@exist_unique_index = 0, 'ALTER TABLE reviews ADD UNIQUE KEY unique_user_app_review (user_id, app_id)', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; @@ -267,7 +265,7 @@ CREATE TABLE IF NOT EXISTS user_feedback ( ); -- 修改app_versions表,添加最后更新时间戳用于热门排行 -SET @exist_last_updated = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'app_versions' AND COLUMN_NAME = 'last_updated'); +SET @exist_last_updated = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'app_versions' AND COLUMN_NAME = 'last_updated'); SET @sql = IF(@exist_last_updated = 0, 'ALTER TABLE app_versions ADD COLUMN last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt;