# php_env **Repository Path**: chenbool/php_env ## Basic Information - **Project Name**: php_env - **Description**: php 继承环境 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-02 - **Last Updated**: 2026-10-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PHP 集成环境 (php_env) 一款用 C# (.NET Framework 3.5) 编写的 **轻量级 PHP 开发环境托盘管理工具**。 自动扫描目录加载服务版本,一键启动/停止 Nginx/Apache/Caddy + PHP + MySQL/MariaDB + Redis。 --- ## 功能特性 | 功能 | 说明 | |:---|:---| | 托盘管理 | 最小化到系统托盘,右键菜单操作,不占任务栏 | | 自动扫描 | 自动扫描 `bin/` 目录加载服务版本,**放目录即识别,无需改代码** | | 路径自动修复 | 移动项目目录后启动时自动修正所有配置文件路径 | | 端口冲突检测 | 启动前检查 80/9000/3306/6379 端口是否被占用 | | 配置校验 | 启动时检查版本目录是否存在,异常给出友好提示 | | 单实例运行 | 防止重复启动多个 app.exe | | 退出自动停止 | 退出程序时自动停止所有服务,防止进程残留 | | Web 服务器 | Nginx / Caddy / Apache 三选一 | | PHP 多版本 | 8.0.30 / 8.2.29 / 8.3.28 / 8.4.15 / 8.5.0 | | 数据库多版本 | MySQL 8.4.7 / MariaDB 11.4.9 | | Redis 多版本 | Redis 7.2.3 / Redis 8.10.1 | | phpMyAdmin | 已集成 5.2.3(含中文),一键管理数据库 | | 配置持久化 | conf.xml 记录选中的版本和服务状态 | | 错误日志 | 启动失败、异常自动记录到 error.log | ## 技术栈 | 类别 | 技术 | |:---|:---| | 开发语言 | C# (.NET Framework 3.5) | | UI 框架 | Windows Forms | | IDE | SharpDevelop 5.1 / 命令行 MSBuild | | 配置文件 | XML (conf.xml) | ## 目录结构 ``` php_env/ ├── app.sln # 解决方案 ├── README.md └── php_env/ # 项目目录 ├── Program.cs # 程序入口(含单实例检查) ├── MainForm.cs # 主窗体逻辑(自动扫描 + 服务控制 + 配置修复 + 配置校验) ├── MainForm.Designer.cs # 窗体设计器(托盘图标 + 右键菜单 + 分隔线) ├── MainForm.resx # 窗体资源(托盘图标等) ├── Tool.cs # 工具类(进程启动/停止 + 端口检测 + 日志记录) ├── XmlExt.cs # XML 配置读写(自动创建/恢复 + 通用读写) ├── conf.xml # 运行配置 ├── app.csproj # 项目文件 └── bin/Debug/ # 编译输出 + 运行目录 ├── app.exe # 主程序 ├── conf.xml # 运行时配置 ├── error.log # 错误日志(自动生成) ├── www/ # 网站根目录 │ ├── index.php │ └── phpmyadmin/ # phpMyAdmin 5.2.3 ├── tmp/ # 临时目录(session、日志等) └── bin/ # 所有服务依赖(统一存放) ├── server/ # Web 服务器 │ ├── nginx/ │ ├── apache/ │ └── caddy/ # (可选) ├── php/ # PHP 多版本 │ ├── php-8.0.30/ │ ├── php-8.2.29/ │ ├── php-8.3.28/ │ ├── php-8.4.15/ │ └── php-8.5.0/ ├── database/ # 数据库多版本 │ ├── mysql8.4.7/ │ └── mariadb11.4.9/ └── redis/ # Redis 多版本 ├── Redis-7.2.3/ └── Redis-8.10.1/ ``` ## 部署教程(小白友好) ### 环境要求 - **操作系统**:Windows 7 及以上 - **.NET Framework**:3.5(Windows 7 自带,Windows 10 需在"控制面板 → 程序 → 启用或关闭 Windows 功能"中开启) ### 第一步:编译 无需安装 Visual Studio,用系统自带的 MSBuild 即可: 1. 打开命令行(Win+R 输入 `cmd`) 2. 执行以下命令: ```bash cd E:\code\php\phpEnv\php_env C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe app.sln /p:Configuration=Debug ``` 编译成功后生成 `php_env\bin\Debug\app.exe`。 ### 第二步:放置服务依赖 将 Nginx、PHP、MySQL、Redis 等放入 `bin\Debug\bin\` 下对应目录: ``` bin\Debug\bin\ ├── server\nginx\ ← 放 Nginx ├── php\php-8.2.29\ ← 放 PHP(目录名即版本名) ├── database\mysql8.4.7\ ← 放 MySQL └── redis\Redis-7.2.3\ ← 放 Redis ``` > **关键规则**:每个服务版本是一个独立子目录,目录名即为菜单显示名。 > 程序启动时自动扫描,无需任何代码改动。 ### 第三步:运行 双击 `app.exe`,程序最小化到系统托盘。 > 如果看不到托盘图标,点击任务栏右下角 `^` 展开隐藏图标。 ## 使用说明 ### 基本操作 右键托盘图标弹出菜单: ``` Localhost → 浏览器打开 http://localhost phpMyAdmin → 浏览器打开 http://localhost/phpmyadmin/ www目录 → 资源管理器打开网站根目录 ─────────────────── 服务器 ▸ → Nginx / Caddy / Apache(选择 Web 服务器) PHP ▸ → php-8.0.30 / php-8.2.29 / ...(选择 PHP 版本) MySQL ▸ → mysql8.4.7 / mariadb11.4.9(选择数据库) Redis ▸ → Redis-7.2.3 / Redis-8.10.1(选择 Redis 版本) ─────────────────── 启动 → 一键启动 Web + PHP + MySQL + Redis 停止 → 一键停止所有服务 重新启动 → 停止后重启 ─────────────────── 退出 → 停止所有服务并退出 ``` ### 快捷操作 - **双击托盘图标**:直接打开 http://localhost - **单击托盘图标**:弹出右键菜单 ### 启动状态提示 启动后会弹出气泡提示,显示每个服务的状态: - 全部成功:`启动成功` + `nginx[√] PHP[√] mysql8.4.7[√] Redis-7.2.3[√]` - 部分失败:`启动失败 (2/4)` + 列出哪项 `[×]` ## 配置文件 (conf.xml) 程序运行时的配置保存在 `conf.xml`。文件缺失或损坏时自动创建默认配置。 ```xml php-8.2.29 0 nginx 0 mysql8.4.7 0 Redis-7.2.3 0 ``` ## 核心模块说明 ### MainForm.cs — 主窗体 | 方法 | 职责 | |:---|:---| | `MainFormLoad()` | 窗体加载:修复路径 → 校验配置 → 扫描目录生成菜单 | | `FixConfigPaths()` | 启动时自动修复所有配置文件路径(Nginx/PHP/MySQL/Apache) | | `ValidateConfig()` | 校验 conf.xml 中版本目录是否实际存在 | | `SetupVersionMenu()` | 扫描 `bin/{服务}/` 目录,动态生成版本子菜单 | | `VersionItemClick()` | 统一版本选择事件,通过 Tag 区分服务类型 | | `StartService()` | 通用服务启动方法(执行命令并返回结果) | | `StartServer/StartPhp/StartMysql/StartRedis()` | 各服务启动参数拼接 | | `StopAllServices()` | 停止所有服务进程(不显示提示,供重启复用) | ### XmlExt.cs — 配置读写 | 方法 | 职责 | |:---|:---| | `EnsureConfigFile()` | 确保 conf.xml 存在,不存在则创建默认配置 | | `GetConfig(node, child)` | 通用读取:从 XML 节点取 [标识值, 状态] | | `SetConfig(node, child, val)` | 通用设置:更新节点值(不立即保存) | | `getServer/getPhp/getDatabase/getRedis()` | 各服务配置读取 | | `updateXml/updateDatabase/updateRedis/updateState()` | 各服务配置更新 | ### Tool.cs — 进程工具 | 方法 | 职责 | |:---|:---| | `RunCmd(workDir, exePath, args)` | 启动进程(含文件存在检查 + 异常日志) | | `KillProcess(name)` | 精确匹配进程名并终止 | | `IsPortInUse(port)` | 检查端口是否被占用 | | `IsProcessRunning(name)` | 检查进程是否正在运行 | | `LogError(message)` | 记录错误日志到 error.log | ## 添加新版本 **零代码改动**,只需两步: 1. 将新版本放入对应目录,如 `bin\Debug\bin\php\php-8.6.0\` 2. 重启 `app.exe`,菜单自动出现 **php-8.6.0** 选项 同理适用于 server / database / redis。 ## phpMyAdmin 已集成 phpMyAdmin 5.2.3(含中文语言包),位于 `www/phpmyadmin/`。 **访问方式**:启动 MySQL + Web 服务器后,浏览器打开 `http://localhost/phpmyadmin/` **配置文件**:`www/phpmyadmin/config.inc.php`(已自动生成) - 认证方式:cookie(登录页输入用户名密码) - 默认语言:中文(zh_CN) - 字符集:utf8mb4 **首次使用需设置 MySQL root 密码**: ```bash # 启动 MySQL 后,在命令行执行: mysqladmin -u root password "你的密码" ``` 然后使用 root + 密码登录 phpMyAdmin。 ## FAQ **Q: 启动后窗体闪一下消失?** A: 正常行为。程序是托盘程序,启动后隐藏到系统托盘,右键托盘图标操作。 **Q: 提示"程序已在运行中"?** A: 程序已启动,请检查系统托盘(右下角隐藏图标区域)。 **Q: 启动失败提示"端口被占用"?** A: 80/9000/3306/6379 端口被其他程序占用。请先停止占用端口的程序(如 IIS、其他 PHP 环境),再重新启动。 **Q: 启动失败显示某项 [×]?** A: 检查对应版本的 exe 是否存在。查看 `error.log` 了解详细错误信息。 **Q: 菜单里没有版本选项?** A: 检查 `bin\Debug\bin\` 下对应服务目录是否存在且包含子目录。 **Q: 提示"配置异常:xxx 目录不存在"?** A: conf.xml 中记录的版本目录不存在。请在菜单中选择一个已存在的版本。 **Q: 如何切换 PHP 版本?** A: 托盘右键 → PHP → 选择版本,会自动保存到 conf.xml,下次启动生效。 **Q: 移动项目目录后服务无法启动?** A: 程序启动时会自动修复所有配置文件路径,重新启动 app.exe 即可。 **Q: 退出后服务还在运行?** A: 不会。退出程序时会自动停止所有服务进程。 **Q: 编译报错找不到 SDK?** A: "未能找到 Windows SDK v6.0A" 是提示不是错误,不影响编译,可忽略。 **Q: 不想用 SharpDevelop 怎么编译?** A: 用命令行 MSBuild 即可,见上方"部署教程"。 **Q: conf.xml 丢失了怎么办?** A: 程序启动时会自动创建默认配置文件,无需手动恢复。 ## 许可证 MIT License