first commit

This commit is contained in:
Ethanfly 2025-12-26 17:14:06 +08:00
commit 5591b153e0
14 changed files with 2290 additions and 0 deletions

389
README-Phper.md Normal file
View File

@ -0,0 +1,389 @@
# PHPer 开发环境管理器
<p align="center">
<img src="public/icon.svg" alt="PHPer Logo" width="120" height="120">
</p>
<p align="center">
<strong>一款功能强大的 Windows PHP 开发环境管理工具</strong>
</p>
<p align="center">
轻松管理 PHP、MySQL、Nginx、Redis、Node.js、Python 等服务,告别繁琐的手动配置
</p>
<p align="center">
<a href="#功能特性">功能特性</a>
<a href="#安装使用">安装使用</a>
<a href="#使用指南">使用指南</a>
<a href="#常见问题">常见问题</a>
</p>
---
## 📸 界面预览
<table>
<tr>
<td><img src="docs/dashboard.png" alt="仪表盘" /></td>
<td><img src="docs/php.png" alt="PHP管理" /></td>
</tr>
<tr>
<td align="center">🏠 仪表盘</td>
<td align="center">🐘 PHP 版本管理</td>
</tr>
<tr>
<td><img src="docs/mysql.png" alt="MySQL管理" /></td>
<td><img src="docs/nginx.png" alt="Nginx管理" /></td>
</tr>
<tr>
<td align="center">🐬 MySQL 管理</td>
<td align="center">🌐 Nginx 管理</td>
</tr>
<tr>
<td><img src="docs/redis.png" alt="Redis管理" /></td>
<td><img src="docs/nodejs.png" alt="Node.js管理" /></td>
</tr>
<tr>
<td align="center">🔴 Redis 管理</td>
<td align="center">💚 Node.js 管理</td>
</tr>
<tr>
<td><img src="docs/python.png" alt="Python管理" /></td>
<td><img src="docs/setting.png" alt="设置" /></td>
</tr>
<tr>
<td align="center">🐍 Python 管理</td>
<td align="center">⚙️ 设置</td>
</tr>
</table>
## ✨ 功能特性
### 🐘 PHP 版本管理
| 功能 | 说明 |
| ------------ | ---------------------------------------------------------- |
| 多版本管理 | 支持同时安装 PHP 8.1、8.2、8.3、8.4、8.5 等多个版本 |
| CGI 独立控制 | 每个 PHP 版本可独立启动/停止 CGI 进程,支持多版本并行运行 |
| 端口自动分配 | 各版本自动分配端口(如 8.4→9084, 8.3→9083 |
| 一键切换 | 点击即可切换 PHP 版本,自动配置系统环境变量 |
| 扩展管理 | 可视化管理 PHP 扩展,支持在线安装(从 PECL |
| 配置编辑 | 在线编辑 php.ini无需手动查找配置文件 |
| 自动配置 | 安装时自动启用常用扩展curl、gd、mbstring、pdo_mysql 等) |
| Composer | 集成 Composer 管理,支持镜像源切换(阿里云、腾讯云等) |
| 日志查看 | 直接查看 PHP 错误日志 |
| 下载源 | 从 [windows.php.net](https://windows.php.net) 官方下载 |
### 🐬 MySQL 管理
| 功能 | 说明 |
| ---------- | -------------------------------------------------------------------- |
| 版本支持 | 支持 MySQL 5.7.x 和 8.0.x 系列 |
| 服务控制 | 启动、停止、重启 MySQL 服务 |
| 密码管理 | 一键修改 root 密码 |
| 配置编辑 | 在线编辑 my.ini 配置文件 |
| 自动初始化 | 安装时自动初始化数据库,开箱即用 |
| 下载源 | 从[阿里云镜像站](https://mirrors.aliyun.com/mysql/)下载,速度更快 |
### 🌐 Nginx 管理
| 功能 | 说明 |
| ------------ | --------------------------------------------- |
| 版本管理 | 支持多个 Nginx 版本,可随时切换 |
| 服务控制 | 启动、停止、重启、热重载配置 |
| 站点管理 | 可视化添加、删除、启用、禁用虚拟主机 |
| Laravel 支持 | 自动生成 Laravel 项目的伪静态配置 |
| SSL 证书 | 支持申请 Let's Encrypt 免费 SSL 证书 |
| 配置编辑 | 在线编辑 nginx.conf 主配置文件 |
| 下载源 | 从 [nginx.org](https://nginx.org) 官方下载 |
### 🔴 Redis 管理
| 功能 | 说明 |
| ------------ | -------------------------------------------------------------------------- |
| Windows 版本 | 使用 Windows 原生编译版 Redis |
| 服务控制 | 启动、停止、重启 Redis 服务 |
| 状态监控 | 实时查看运行状态、内存使用情况 |
| 配置编辑 | 在线编辑 redis.windows.conf 配置 |
| 下载源 | 从 [GitHub (redis-windows)](https://github.com/redis-windows/redis-windows) 下载 |
### 💚 Node.js 管理
| 功能 | 说明 |
| ---------- | -------------------------------------------------------- |
| 多版本管理 | 支持同时安装多个 Node.js 版本 |
| LTS 支持 | 显示 LTS 版本和 Current 版本标识 |
| npm 集成 | 自动显示对应的 npm 版本 |
| 一键切换 | 快速切换默认 Node.js 版本,自动配置环境变量 |
| 下载源 | 从 [nodejs.org](https://nodejs.org) 官方下载 |
### 🐍 Python 管理
| 功能 | 说明 |
| ---------- | -------------------------------------------------------- |
| 嵌入式版本 | 使用免安装的嵌入式版本,不影响系统环境 |
| pip 集成 | 自动配置 pip支持安装 Python 包 |
| 多版本管理 | 支持同时安装多个 Python 版本 |
| 一键切换 | 快速切换默认 Python 版本 |
| 下载源 | 从 [python.org](https://www.python.org) 官方下载 |
### 🔧 Git 管理
| 功能 | 说明 |
| ---------- | ------------------------------ |
| 版本管理 | 一键安装/卸载 Git for Windows |
| 配置管理 | 可视化配置用户名、邮箱等信息 |
| 环境变量 | 自动配置系统 PATH |
### 🌍 站点管理
- **快速创建站点** - 填写域名和路径即可创建虚拟主机
- 🎯 **Laravel 一键配置** - 自动配置 public 目录和伪静态规则
- 🔒 **SSL 证书申请** - 集成 Let's Encrypt 自动申请
- 📝 **Hosts 自动配置** - 自动添加域名到系统 hosts 文件
- 📋 **站点日志查看** - 查看每个站点的访问日志和错误日志
- 🌐 **一键打开站点** - 点击域名在默认浏览器打开
### 📋 日志查看
| 功能 | 说明 |
| ------------ | ---------------------------------------------- |
| 多服务日志 | 支持查看 Nginx、PHP、MySQL、Redis 日志 |
| 站点日志 | 查看各站点的访问日志和错误日志 |
| 实时刷新 | 支持刷新日志内容,查看最新记录 |
| 行数控制 | 可配置显示的日志行数100-5000 行) |
| 快速清空 | 一键清空指定日志文件 |
| 打开目录 | 快速在文件管理器中打开日志目录 |
### ⚙️ 其他功能
- 🚀 **开机自启动** - 可配置各服务开机自动启动(静默模式,无弹窗)
- 🔇 **静默启动** - 所有服务启动无黑色窗口闪烁
- 📋 **Hosts 管理** - 可视化管理系统 hosts 文件
- 🌙 **深色/浅色主题** - 支持主题切换
- 📊 **服务状态监控** - 实时显示各服务运行状态
- ⚡ **页面切换优化** - 使用 KeepAlive 缓存页面,切换无闪烁
- 🔢 **自动版本号** - 打包时自动更新版本号
- 📥 **下载源说明** - 清晰显示各软件的下载来源
- 🌐 **默认浏览器打开** - 站点链接自动在默认浏览器打开
## 🛠️ 技术栈
| 技术 | 说明 |
| --------------------------------------------- | ------------ |
| [Vue 3](https://vuejs.org/) | 前端框架 |
| [TypeScript](https://www.typescriptlang.org/) | 类型安全 |
| [Electron](https://www.electronjs.org/) | 桌面应用框架 |
| [Element Plus](https://element-plus.org/) | UI 组件库 |
| [Vite](https://vitejs.dev/) | 构建工具 |
| [Pinia](https://pinia.vuejs.org/) | 状态管理 |
## 📦 安装使用
### 系统要求
- ✅ Windows 10/11 (64 位)
- ✅ Node.js 18.0 或更高版本
- ✅ 管理员权限(用于管理服务和修改 hosts 文件)
- ✅ [Visual C++ Redistributable 2015-2022](https://aka.ms/vs/17/release/vc_redist.x64.exe)
### 开发环境
```bash
# 克隆项目
git clone https://github.com/your-username/phper.git
cd phper
# 安装依赖
npm install
# 启动开发服务器
npm run electron:dev
```
### 构建生产版本
```bash
# 构建 Windows 安装包(自动更新 patch 版本号 +0.0.1
npm run build
# 指定版本号更新类型
npm run build:patch # 1.0.0 -> 1.0.1
npm run build:minor # 1.0.0 -> 1.1.0
npm run build:major # 1.0.0 -> 2.0.0
# 不更新版本号直接打包
npm run build:nobump
```
构建完成后,安装包将生成在 `release` 目录中。
## 📁 项目结构
```
phper/
├── electron/ # Electron 主进程
│ ├── main.ts # 主进程入口
│ ├── preload.ts # 预加载脚本IPC 通信)
│ └── services/ # 服务管理模块
│ ├── ConfigStore.ts # 配置存储(使用 electron-store
│ ├── PhpManager.ts # PHP 版本管理器
│ ├── MysqlManager.ts # MySQL 服务管理器
│ ├── NginxManager.ts # Nginx 服务管理器
│ ├── RedisManager.ts # Redis 服务管理器
│ ├── NodeManager.ts # Node.js 版本管理器
│ ├── PythonManager.ts # Python 版本管理器
│ ├── GitManager.ts # Git 管理器
│ ├── ServiceManager.ts # 开机自启服务管理器
│ ├── HostsManager.ts # Hosts 文件管理器
│ └── LogManager.ts # 日志管理器
├── src/ # Vue 前端源码
│ ├── App.vue # 根组件(含 KeepAlive 缓存)
│ ├── main.ts # 入口文件
│ ├── vite-env.d.ts # 类型声明
│ ├── router/ # 路由配置
│ │ └── index.ts
│ ├── stores/ # Pinia 状态管理
│ │ └── serviceStore.ts # 服务状态存储
│ ├── components/ # 公共组件
│ │ └── LogViewer.vue # 日志查看器组件
│ ├── styles/ # 样式文件
│ │ └── main.scss # 全局样式(含主题变量)
│ └── views/ # 页面视图
│ ├── Dashboard.vue # 仪表盘
│ ├── PhpManager.vue # PHP 管理
│ ├── MysqlManager.vue # MySQL 管理
│ ├── NginxManager.vue # Nginx 管理
│ ├── RedisManager.vue # Redis 管理
│ ├── NodeManager.vue # Node.js 管理
│ ├── PythonManager.vue # Python 管理
│ ├── GitManager.vue # Git 管理
│ ├── SitesManager.vue # 站点管理
│ ├── HostsManager.vue # Hosts 管理
│ └── Settings.vue # 设置
├── scripts/ # 构建脚本
│ └── bump-version.js # 版本号自动更新脚本
├── public/ # 静态资源
│ ├── icon.svg # 应用图标
│ └── version.json # 版本信息(构建时生成)
├── index.html # HTML 模板
├── package.json # 项目配置
├── vite.config.ts # Vite 配置
├── tsconfig.json # TypeScript 配置
└── README.md # 项目说明
```
## 📖 使用指南
### 首次使用
1. **安装运行时依赖**
- 确保已安装 [Visual C++ Redistributable 2015-2022](https://aka.ms/vs/17/release/vc_redist.x64.exe)
2. **以管理员身份运行**
- 右键点击应用图标,选择"以管理员身份运行"
- 这是管理服务和修改 hosts 文件所必需的
3. **安装服务**
- 首次使用需要安装 PHP、MySQL、Nginx、Redis
- 进入对应管理页面,点击"安装"按钮
### 创建第一个站点
1. 安装并启动 Nginx 和 PHP
2. 进入"站点管理"页面
3. 点击"添加站点"
4. 填写站点信息:
- 站点名称:如 `myproject`
- 域名:如 `myproject.test`
- 根目录:如 `C:\Projects\myproject`Laravel 项目无需指定 public
- 选择 PHP 版本
- 如果是 Laravel 项目,开启"Laravel 项目"选项
5. 点击确认,站点即创建完成
6. 在浏览器访问 http://myproject.test
### 配置开机自启动
1. 进入"设置"页面
2. 在"开机自启动"部分,开启需要自启的服务
3. 应用会在 Windows 启动目录创建启动脚本
## ❓ 常见问题
### Q: 为什么需要管理员权限?
A: 应用需要管理员权限来:
- 启动/停止 Windows 服务
- 修改系统 hosts 文件
- 配置系统环境变量
### Q: PHP 下载很慢怎么办?
A: PHP 从 windows.php.net 官方下载,如果速度较慢:
- 可以手动从官网下载 ZIP 文件
- 解压到 `[安装目录]/php/php-版本号` 目录
- 重新打开应用即可识别
### Q: MySQL 启动失败?
A: 常见原因:
- 3306 端口被占用,检查是否有其他 MySQL 实例
- 防火墙阻止,添加防火墙规则
- 数据目录权限问题,确保目录可写
### Q: 如何卸载服务?
A: 进入对应服务管理页面,先停止服务,然后点击"卸载"按钮。
## 🔗 相关资源
| 软件 | 下载源 |
| ------- | ---------------------------------------------------------------------- |
| PHP | [windows.php.net](https://windows.php.net/download/) - 官方 Windows 版 |
| MySQL | [阿里云镜像](https://mirrors.aliyun.com/mysql/) - 国内高速下载 |
| Nginx | [nginx.org](https://nginx.org/en/download.html) - 官方 Windows 版 |
| Redis | [GitHub redis-windows](https://github.com/redis-windows/redis-windows) |
| Node.js | [nodejs.org](https://nodejs.org/en/download/) - 官方下载 |
| Python | [python.org](https://www.python.org/downloads/windows/) - 嵌入式版本 |
| Git | [git-scm.com](https://git-scm.com/download/win) - 官方 Windows 版 |
## 📄 开源协议
本项目基于 [MIT License](LICENSE) 开源。
## 🤝 贡献指南
欢迎提交 Issue 和 Pull Request
1. Fork 本仓库
2. 创建功能分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 提交 Pull Request
## 📮 反馈建议
如果您在使用过程中遇到问题或有任何建议,欢迎:
- 提交 [Issue](https://github.com/your-username/phper/issues)
- 发送邮件至 your-email@example.com
---
<p align="center">
Made with ❤️ for PHP Developers
</p>
<p align="center">
⭐ 如果这个项目对您有帮助,请给我们一个 Star
</p>

5
docs/.gitkeep Normal file
View File

@ -0,0 +1,5 @@
# 此目录用于存放文档截图
# 请将以下截图放入此目录:
# - dashboard.png 仪表盘截图
# - php-manager.png PHP管理页面截图

BIN
docs/dashboard.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

BIN
docs/mysql.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

BIN
docs/nginx.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

BIN
docs/nodejs.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

BIN
docs/php.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

BIN
docs/python.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

BIN
docs/redis.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
docs/setting.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

11
favicon.svg Normal file
View File

@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
<defs>
<linearGradient id="grad" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#10b981"/>
<stop offset="100%" style="stop-color:#06b6d4"/>
</linearGradient>
</defs>
<circle cx="50" cy="50" r="45" fill="url(#grad)"/>
<text x="50" y="65" text-anchor="middle" font-size="50" fill="white">🐘</text>
</svg>

After

Width:  |  Height:  |  Size: 423 B

433
index.html Normal file
View File

@ -0,0 +1,433 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PHPer - Windows PHP 开发环境管理器</title>
<meta name="description" content="一款功能强大的 Windows PHP 开发环境管理工具,轻松管理 PHP、MySQL、Nginx、Redis、Node.js、Python 等服务">
<meta name="keywords" content="PHP, Windows, 开发环境, WNMP, MySQL, Nginx, Redis, Node.js">
<link rel="icon" type="image/svg+xml" href="favicon.svg">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&family=Noto+Sans+SC:wght@400;500;600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- 背景装饰 -->
<div class="bg-decoration">
<div class="grid-lines"></div>
<div class="glow glow-1"></div>
<div class="glow glow-2"></div>
<div class="glow glow-3"></div>
</div>
<!-- 导航栏 -->
<nav class="navbar">
<div class="container">
<a href="#" class="logo">
<span class="logo-icon">🐘</span>
<span class="logo-text">PHPer</span>
</a>
<div class="nav-links">
<a href="#features">功能特性</a>
<a href="#screenshots">界面预览</a>
<a href="#services">支持服务</a>
<a href="#faq">常见问题</a>
<a href="https://github.com/ethanfly/php-manager" target="_blank" class="btn btn-outline btn-sm">
<svg class="icon" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/></svg>
GitHub
</a>
</div>
<button class="mobile-menu-btn" aria-label="菜单">
<span></span>
<span></span>
<span></span>
</button>
</div>
</nav>
<!-- Hero 区域 -->
<header class="hero">
<div class="container">
<div class="hero-content">
<div class="hero-badge">
<span class="badge-dot"></span>
Windows 专属 · 开源免费
</div>
<h1 class="hero-title">
<span class="title-line">告别繁琐配置</span>
<span class="title-line gradient-text">一键管理开发环境</span>
</h1>
<p class="hero-description">
PHPer 是一款功能强大的 Windows PHP 开发环境管理工具,<br>
轻松管理 <span class="highlight">PHP</span><span class="highlight">MySQL</span><span class="highlight">Nginx</span><span class="highlight">Redis</span><span class="highlight">Node.js</span><span class="highlight">Python</span> 等服务
</p>
<div class="hero-actions">
<a href="https://github.com/ethanfly/php-manager/releases" target="_blank" class="btn btn-primary btn-lg">
<svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>
下载最新版本
</a>
<a href="https://github.com/ethanfly/php-manager" target="_blank" class="btn btn-ghost btn-lg">
<svg class="icon" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/></svg>
查看源码
</a>
</div>
<div class="hero-stats">
<div class="stat">
<span class="stat-value">7+</span>
<span class="stat-label">支持服务</span>
</div>
<div class="stat-divider"></div>
<div class="stat">
<span class="stat-value">100%</span>
<span class="stat-label">开源免费</span>
</div>
<div class="stat-divider"></div>
<div class="stat">
<span class="stat-value">Win</span>
<span class="stat-label">原生支持</span>
</div>
</div>
</div>
<div class="hero-visual">
<div class="terminal-window">
<div class="terminal-header">
<div class="terminal-buttons">
<span class="btn-close"></span>
<span class="btn-minimize"></span>
<span class="btn-maximize"></span>
</div>
<span class="terminal-title">PHPer 管理器</span>
</div>
<div class="terminal-body">
<div class="service-row">
<span class="service-icon">🐘</span>
<span class="service-name">PHP 8.4.2</span>
<span class="service-status running">● 运行中</span>
<span class="service-port">:9084</span>
</div>
<div class="service-row">
<span class="service-icon">🐬</span>
<span class="service-name">MySQL 8.0.40</span>
<span class="service-status running">● 运行中</span>
<span class="service-port">:3306</span>
</div>
<div class="service-row">
<span class="service-icon">🌐</span>
<span class="service-name">Nginx 1.27.3</span>
<span class="service-status running">● 运行中</span>
<span class="service-port">:80</span>
</div>
<div class="service-row">
<span class="service-icon">🔴</span>
<span class="service-name">Redis 7.4.1</span>
<span class="service-status running">● 运行中</span>
<span class="service-port">:6379</span>
</div>
<div class="service-row">
<span class="service-icon">💚</span>
<span class="service-name">Node.js 22.12</span>
<span class="service-status stopped">○ 已停止</span>
<span class="service-port"></span>
</div>
<div class="terminal-prompt">
<span class="prompt-symbol"></span>
<span class="prompt-text typing">所有服务已就绪...</span>
<span class="cursor"></span>
</div>
</div>
</div>
</div>
</div>
</header>
<!-- 功能特性 -->
<section id="features" class="section features">
<div class="container">
<div class="section-header">
<span class="section-tag">功能特性</span>
<h2 class="section-title">开发环境管理<br><span class="gradient-text">从未如此简单</span></h2>
<p class="section-desc">告别命令行配置,可视化管理所有开发服务</p>
</div>
<div class="features-grid">
<div class="feature-card feature-highlight">
<div class="feature-icon">🐘</div>
<h3>PHP 多版本管理</h3>
<p>支持 PHP 8.1 - 8.5 多版本并行,每个版本独立 CGI 进程,一键切换系统默认版本</p>
<ul class="feature-list">
<li>各版本端口自动分配</li>
<li>可视化扩展管理</li>
<li>在线编辑 php.ini</li>
<li>集成 Composer 管理</li>
</ul>
</div>
<div class="feature-card">
<div class="feature-icon">🐬</div>
<h3>MySQL 管理</h3>
<p>支持 MySQL 5.7/8.0,一键安装初始化,密码管理,配置编辑</p>
</div>
<div class="feature-card">
<div class="feature-icon">🌐</div>
<h3>Nginx 管理</h3>
<p>多版本切换站点管理Laravel 自动配置SSL 证书申请</p>
</div>
<div class="feature-card">
<div class="feature-icon">🔴</div>
<h3>Redis 管理</h3>
<p>Windows 原生版 Redis服务控制状态监控配置编辑</p>
</div>
<div class="feature-card">
<div class="feature-icon">💚</div>
<h3>Node.js 管理</h3>
<p>多版本管理LTS 标识npm 集成,一键切换</p>
</div>
<div class="feature-card">
<div class="feature-icon">🐍</div>
<h3>Python 管理</h3>
<p>嵌入式版本pip 集成,多版本管理,不污染系统</p>
</div>
</div>
</div>
</section>
<!-- 界面预览 -->
<section id="screenshots" class="section screenshots">
<div class="container">
<div class="section-header">
<span class="section-tag">界面预览</span>
<h2 class="section-title">精心设计的<span class="gradient-text">用户界面</span></h2>
<p class="section-desc">深色/浅色主题,现代化 UI 设计,流畅的操作体验</p>
</div>
<div class="screenshot-tabs">
<button class="tab-btn active" data-tab="dashboard">🏠 仪表盘</button>
<button class="tab-btn" data-tab="php">🐘 PHP</button>
<button class="tab-btn" data-tab="mysql">🐬 MySQL</button>
<button class="tab-btn" data-tab="nginx">🌐 Nginx</button>
<button class="tab-btn" data-tab="redis">🔴 Redis</button>
<button class="tab-btn" data-tab="nodejs">💚 Node.js</button>
</div>
<div class="screenshot-container">
<div class="screenshot-frame">
<div class="screenshot-window-bar">
<div class="window-buttons">
<span></span><span></span><span></span>
</div>
<span class="window-title">PHPer</span>
</div>
<div class="screenshot-wrapper">
<img src="docs/dashboard.png" alt="仪表盘" class="screenshot-img active" data-tab="dashboard">
<img src="docs/php.png" alt="PHP管理" class="screenshot-img" data-tab="php">
<img src="docs/mysql.png" alt="MySQL管理" class="screenshot-img" data-tab="mysql">
<img src="docs/nginx.png" alt="Nginx管理" class="screenshot-img" data-tab="nginx">
<img src="docs/redis.png" alt="Redis管理" class="screenshot-img" data-tab="redis">
<img src="docs/nodejs.png" alt="Node.js管理" class="screenshot-img" data-tab="nodejs">
</div>
</div>
</div>
</div>
</section>
<!-- 更多功能 -->
<section class="section more-features">
<div class="container">
<div class="features-banner">
<div class="banner-content">
<h3>🌍 站点管理</h3>
<p>可视化创建虚拟主机,自动配置 Nginx支持 Laravel 项目一键配置</p>
</div>
<div class="banner-content">
<h3>📋 Hosts 管理</h3>
<p>可视化管理系统 hosts 文件,添加域名自动同步</p>
</div>
<div class="banner-content">
<h3>🚀 开机自启</h3>
<p>服务开机自动启动,静默模式,无黑窗口闪烁</p>
</div>
<div class="banner-content">
<h3>📊 日志查看</h3>
<p>统一查看各服务日志,支持刷新、清空、打开目录</p>
</div>
</div>
</div>
</section>
<!-- 支持的服务 -->
<section id="services" class="section services">
<div class="container">
<div class="section-header">
<span class="section-tag">下载源</span>
<h2 class="section-title">官方渠道<span class="gradient-text">安全可靠</span></h2>
<p class="section-desc">所有软件均从官方或可信镜像下载,安全有保障</p>
</div>
<div class="services-table">
<div class="table-row table-header">
<span>软件</span>
<span>下载源</span>
<span>说明</span>
</div>
<div class="table-row">
<span class="service-name"><span class="emoji">🐘</span> PHP</span>
<span class="source"><a href="https://windows.php.net/download/" target="_blank">windows.php.net</a></span>
<span class="desc">官方 Windows 版</span>
</div>
<div class="table-row">
<span class="service-name"><span class="emoji">🐬</span> MySQL</span>
<span class="source"><a href="https://mirrors.aliyun.com/mysql/" target="_blank">阿里云镜像</a></span>
<span class="desc">国内高速下载</span>
</div>
<div class="table-row">
<span class="service-name"><span class="emoji">🌐</span> Nginx</span>
<span class="source"><a href="https://nginx.org/en/download.html" target="_blank">nginx.org</a></span>
<span class="desc">官方 Windows 版</span>
</div>
<div class="table-row">
<span class="service-name"><span class="emoji">🔴</span> Redis</span>
<span class="source"><a href="https://github.com/redis-windows/redis-windows" target="_blank">GitHub</a></span>
<span class="desc">Windows 编译版</span>
</div>
<div class="table-row">
<span class="service-name"><span class="emoji">💚</span> Node.js</span>
<span class="source"><a href="https://nodejs.org/en/download/" target="_blank">nodejs.org</a></span>
<span class="desc">官方下载</span>
</div>
<div class="table-row">
<span class="service-name"><span class="emoji">🐍</span> Python</span>
<span class="source"><a href="https://www.python.org/downloads/windows/" target="_blank">python.org</a></span>
<span class="desc">嵌入式版本</span>
</div>
<div class="table-row">
<span class="service-name"><span class="emoji">🔧</span> Git</span>
<span class="source"><a href="https://git-scm.com/download/win" target="_blank">git-scm.com</a></span>
<span class="desc">官方 Windows 版</span>
</div>
</div>
</div>
</section>
<!-- 常见问题 -->
<section id="faq" class="section faq">
<div class="container">
<div class="section-header">
<span class="section-tag">FAQ</span>
<h2 class="section-title">常见问题</h2>
</div>
<div class="faq-list">
<div class="faq-item">
<button class="faq-question">
<span>为什么需要管理员权限?</span>
<svg class="faq-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg>
</button>
<div class="faq-answer">
<p>应用需要管理员权限来:</p>
<ul>
<li>启动/停止 Windows 服务</li>
<li>修改系统 hosts 文件</li>
<li>配置系统环境变量</li>
</ul>
</div>
</div>
<div class="faq-item">
<button class="faq-question">
<span>PHP 下载很慢怎么办?</span>
<svg class="faq-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg>
</button>
<div class="faq-answer">
<p>PHP 从 windows.php.net 官方下载,如果速度较慢:</p>
<ul>
<li>可以手动从官网下载 ZIP 文件</li>
<li>解压到 <code>[安装目录]/php/php-版本号</code> 目录</li>
<li>重新打开应用即可识别</li>
</ul>
</div>
</div>
<div class="faq-item">
<button class="faq-question">
<span>MySQL 启动失败怎么办?</span>
<svg class="faq-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg>
</button>
<div class="faq-answer">
<p>常见原因:</p>
<ul>
<li>3306 端口被占用,检查是否有其他 MySQL 实例</li>
<li>防火墙阻止,添加防火墙规则</li>
<li>数据目录权限问题,确保目录可写</li>
</ul>
</div>
</div>
<div class="faq-item">
<button class="faq-question">
<span>系统要求是什么?</span>
<svg class="faq-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg>
</button>
<div class="faq-answer">
<ul>
<li>Windows 10/11 (64 位)</li>
<li>管理员权限</li>
<li><a href="https://aka.ms/vs/17/release/vc_redist.x64.exe" target="_blank">Visual C++ Redistributable 2015-2022</a></li>
</ul>
</div>
</div>
</div>
</div>
</section>
<!-- 技术栈 -->
<section class="section tech-stack">
<div class="container">
<div class="tech-content">
<h3>🛠️ 技术栈</h3>
<div class="tech-tags">
<span class="tech-tag">Vue 3</span>
<span class="tech-tag">TypeScript</span>
<span class="tech-tag">Electron</span>
<span class="tech-tag">Element Plus</span>
<span class="tech-tag">Vite</span>
<span class="tech-tag">Pinia</span>
</div>
</div>
</div>
</section>
<!-- CTA 区域 -->
<section class="section cta">
<div class="container">
<div class="cta-content">
<h2>准备好提升开发效率了吗?</h2>
<p>立即下载 PHPer开启高效的 PHP 开发之旅</p>
<div class="cta-actions">
<a href="https://github.com/ethanfly/php-manager/releases" target="_blank" class="btn btn-primary btn-lg">
<svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>
免费下载
</a>
<a href="https://github.com/ethanfly/php-manager" target="_blank" class="btn btn-outline btn-lg">
<svg class="icon" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/></svg>
Star on GitHub
</a>
</div>
</div>
</div>
</section>
<!-- 页脚 -->
<footer class="footer">
<div class="container">
<div class="footer-content">
<div class="footer-brand">
<span class="logo-icon">🐘</span>
<span class="logo-text">PHPer</span>
</div>
<p class="footer-text">Made with ❤️ for PHP Developers</p>
<div class="footer-links">
<a href="https://github.com/ethanfly/php-manager" target="_blank">GitHub</a>
<a href="https://github.com/ethanfly/php-manager/issues" target="_blank">反馈问题</a>
<a href="https://github.com/ethanfly/php-manager/releases" target="_blank">下载</a>
</div>
<p class="copyright">© 2024 PHPer. 基于 MIT 协议开源.</p>
</div>
</div>
</footer>
<script src="script.js"></script>
</body>
</html>

183
script.js Normal file
View File

@ -0,0 +1,183 @@
/**
* PHPer 官网交互脚本
*/
document.addEventListener('DOMContentLoaded', () => {
// 初始化所有功能
initScreenshotTabs();
initFAQ();
initScrollAnimations();
initMobileMenu();
initSmoothScroll();
});
/**
* 截图标签切换
*/
function initScreenshotTabs() {
const tabs = document.querySelectorAll('.tab-btn');
const images = document.querySelectorAll('.screenshot-img');
tabs.forEach(tab => {
tab.addEventListener('click', () => {
const target = tab.dataset.tab;
// 切换标签状态
tabs.forEach(t => t.classList.remove('active'));
tab.classList.add('active');
// 切换图片
images.forEach(img => {
if (img.dataset.tab === target) {
img.classList.add('active');
} else {
img.classList.remove('active');
}
});
});
});
}
/**
* FAQ 折叠面板
*/
function initFAQ() {
const faqItems = document.querySelectorAll('.faq-item');
faqItems.forEach(item => {
const question = item.querySelector('.faq-question');
question.addEventListener('click', () => {
// 关闭其他展开的项目
faqItems.forEach(other => {
if (other !== item && other.classList.contains('active')) {
other.classList.remove('active');
}
});
// 切换当前项目
item.classList.toggle('active');
});
});
}
/**
* 滚动动画
*/
function initScrollAnimations() {
const observerOptions = {
root: null,
rootMargin: '0px',
threshold: 0.1
};
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('visible');
}
});
}, observerOptions);
// 观察需要动画的元素
const animatedElements = document.querySelectorAll(
'.feature-card, .faq-item, .table-row:not(.table-header)'
);
animatedElements.forEach((el, index) => {
el.style.transitionDelay = `${index * 0.05}s`;
observer.observe(el);
});
}
/**
* 移动端菜单
*/
function initMobileMenu() {
const menuBtn = document.querySelector('.mobile-menu-btn');
const navLinks = document.querySelector('.nav-links');
if (!menuBtn || !navLinks) return;
menuBtn.addEventListener('click', () => {
menuBtn.classList.toggle('active');
navLinks.classList.toggle('mobile-open');
});
// 点击链接后关闭菜单
navLinks.querySelectorAll('a').forEach(link => {
link.addEventListener('click', () => {
menuBtn.classList.remove('active');
navLinks.classList.remove('mobile-open');
});
});
}
/**
* 平滑滚动
*/
function initSmoothScroll() {
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function(e) {
const href = this.getAttribute('href');
if (href === '#') return;
e.preventDefault();
const target = document.querySelector(href);
if (target) {
target.scrollIntoView({
behavior: 'smooth',
block: 'start'
});
}
});
});
}
/**
* 导航栏滚动效果
*/
let lastScroll = 0;
const navbar = document.querySelector('.navbar');
window.addEventListener('scroll', () => {
const currentScroll = window.pageYOffset;
if (currentScroll > 100) {
navbar.style.boxShadow = '0 4px 20px rgba(0, 0, 0, 0.3)';
} else {
navbar.style.boxShadow = 'none';
}
lastScroll = currentScroll;
});
/**
* 打字机效果终端提示
*/
function typeWriter(element, text, speed = 50) {
let i = 0;
element.textContent = '';
function type() {
if (i < text.length) {
element.textContent += text.charAt(i);
i++;
setTimeout(type, speed);
}
}
type();
}
// 页面加载完成后启动打字机效果
window.addEventListener('load', () => {
const promptText = document.querySelector('.prompt-text');
if (promptText) {
setTimeout(() => {
typeWriter(promptText, '所有服务已就绪,开始开发吧!', 80);
}, 1500);
}
});

1269
style.css Normal file

File diff suppressed because it is too large Load Diff