找回密码
 立即注册
查看: 6|回复: 0

JAVA web PHP7.4 PHPMyAdmin5.2 JAR运行整合

[复制链接]

该用户从未签到

2567

主题

-54

回帖

2256

积分

掌门

积分
2256
发表于 5 小时前 | 显示全部楼层

JAVA web PHP7.4 PHPMyAdmin5.2 JAR运行整合

通过网盘分享的文件:JAVAwebPHPMyAdmin
链接: [hide]https://pan.baidu.com/s/1n_tYYRtVandlLm_iMsnBow?pwd=qje3 提取码: qje3
JAVA web   PHP7.4   PHPMyAdmin5.2 JAR运行整合
更豆包 了了大半天 做的没用编程基础 这个也算是 不按常理出牌
目的是最近 很多老游戏都是 mysql 5.5 数据库的搞的头大 于是就手动编译 兼容 CentOS7.x 和 Ubuntu20.x~24.x
使用脚本启动,问题来了我不习惯使用命令行操作数据库 于是 就跟豆包聊了一个 奇葩 jar 程序出来
使用文旦 也是豆包生成的别问 怎么修改 真一点不懂
jar 主要角色是扮演WEB服务器 连携 PHP 驱动  phpMyAdmin  这样 我们通过浏览器来管理数据库
<font size="3"><b># pma-server:单 JAR 便携版 phpMyAdmin 网关 </b></font>— 源码 / 构建 / 部署 全说明
> 一句话:把「PHP 7.4   phpMyAdmin 5.2.3   SQLite/MySQL 双驱动   依赖库」全部塞进一个 JAR,JDK8 直接 `java -jar` 跑起来,Windows/Linux 双平台通用,配置全部存 SQLite,不用装宝塔、不用配 Apache/Nginx。
---
## 一、这个 JAR 解决什么痛点
| 痛点 | 传统方案 | 本方案 |
|---|---|---|
| 装个 phpMyAdmin 要整套 LAMP/宝塔,环境重、依赖多 | 装 PHP   Apache/Nginx   各种扩展 | 单 JAR 全内嵌,解压即用 |
| PHP 版本/扩展对不上,报错满天飞 | 手工调 php.ini、装扩展 | php-cgi 内嵌在 jar,版本固定 7.4.33 |
| 服务器旧(CentOS 7)缺新库 | 满世界找 .so | 依赖库(libzip.so.5、libsodium.so.23 等)打进 jar lib/,自动解压 |
| 数据库管理页裸奔,谁都能试密码 | 直接暴露端口 | 门卫登录(自定义前缀   账号密码   会话过期)  每 IP 限速 |
| 配置散落各处、迁移服务器要重配 | server.conf / config.inc.php | 13 项配置全存 SQLite(pma-server.db),拷贝即迁移 |
| 密码明文写在配置文件里 | 文本配置 | SQLite 文件   打码查看工具,权限独立 |
| Windows / Linux 两套部署 | 两套环境两套配置 | 同一个 jar 双平台跑,内嵌对应 PHP |
**核心安全机制(三层)**:
1. **门卫拦截**:只有带指定前缀(如 `/18806088212`)的路径能进,其余一律 403;门卫账号密码登录后发 HttpOnly Cookie 会话(默认 2 小时过期),退出数据库自动回门卫页。
2. **每 IP 限速**:`rate_php_per_sec`(默认 20)= 每 IP 每秒最多 20 个 .php 请求,防毫秒级恶意高并发刷爆。
3. **PHP 线程级安全**:启动时向 php.ini 注入安全项,并写前置安全钩子(禁 `exec`/`system`/`passthru` 等危险函数),防 shell 反弹/源码泄露。
---
## 二、源码文件说明(3 个 .java)
| 文件 | 作用 | 关键实现 |
|---|---|---|
| **Server.java** | 主程序(唯一入口,类名 `Server`) | JDK8 `HttpsServer`/`HttpServer` 起服务;php-cgi 桥接;门卫登录/限速/登出拦截;JAR 内嵌资源解压与关闭回收;自签证书(100 年);HTTP→HTTPS 301;启动时自动建 `phpmyadmin` 配置存储库 |
| **GwDb.java** | SQLite 配置库(替代 server.conf) | 内置种子(jar 内 `pma-server.db`)→ 外部(jar 同级 `pma-server.db`)优先读写;首次启动外部不存在则用内置初始化;13 个配置键补缺(server.conf 现值 → 内置值 → 代码默认值 三级兜底) |
| **AuthTool.java** | 命令行改配置工具 | `list` / `set key value` / `gw-pass` / `db-pass` / `gw-user` / `db-user` / `gw-prefix` / `db-host` / `db-port`,密码查看时打码 `12****` |
**Server.java 主流程**:
```
main()
├─ GwDb.init()          // SQLite 配置库就绪(内置种子 → 外部初始化)
├─ 从 SQLite 覆盖全部配置  // 端口/限速/DEBUG/数据库/门卫
├─ extractPma()          // 解压内嵌 phpMyAdmin   PHP,生成 config.inc.php
├─ ensureCert()          // 生成 100 年自签名证书(只一次,存持久目录)
├─ HTTPS 主服务          // https://host:HTTPS_PORT
├─ HTTP 301 服务          // http://hostORT → https://host:HTTPS_PORT
└─ shutdown hook          // 关停时自动回收解压目录
```
**SQLite 13 项配置键(全部在 pma-server.db 的 auth_config 表)**:
| key | 默认值 | 含义 |
|---|---|---|
| db_host / db_port | 127.0.0.1 / 3306 | 目标 MySQL 地址/端口 |
| db_user / db_pass | root / 123456 | 目标 MySQL 账号/密码 |
| gw_user / gw_pass | admin / 123456 | 门卫登录账号/密码 |
| gw_prefix | /464aCS | 访问前缀(非法路径 403) |
| gw_session_hours | 2 | 门卫会话有效期(小时) |
| port / https_port | 8080 / 8443 | HTTP 跳转端口 / HTTPS 主端口 |
| rate_php_per_sec | 20 | 每 IP 每秒 .php 请求上限 |
| debug | false | 调试开关(true 打印请求详情) |
| mysql_bin | 空 | Windows 下 mysql.exe 完整路径(Linux 走 PATH) |
---
## 三、用 IDE 构建(IntelliJ IDEA 示例)
> 原则:**IDE 只负责编译出 .class,内嵌大资源(PHP/phpMyAdmin/驱动/依赖库)用脚本合并**,比 IDEA 的 Artifact 更可控、不易踩坑。
### 第 1 步:新建项目
1. `File → New → Project`,JDK 选 **1.8**(项目 SDK = jdk1.8.0_xxx)。
2. 把 `Server.java`、`GwDb.java`、`AuthTool.java` 拷到 `src/` 根目录(**文件名必须叫 Server.java,类名就是 Server,不要改**)。
### 第 2 步:添加依赖(两个驱动 jar)
1. `File → Project Structure → Modules → 选中模块 → Dependencies →   → JARs or directories`
2. 加入:`sqlite-jdbc-3.36.0.3.jar`、`mysql-connector-java-5.1.49.jar`
3. 确认编译通过:`Build → Build Project`(或右键 Server.java → Run,能看到 `[GwDb] SQLite 配置库就绪` 即正常)。
### 第 3 步:打可执行 JAR(合并内嵌资源)
编译产物(`out/production/<模块>/` 下的 .class)打包顺序:
```
1. 准备 class:Server.class   Server$Handler.class   Server$Handler$1.class
                 Server$Handler$2.class   Server$RedirectHandler.class
                 GwDb.class   AuthTool.class
   
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|网单资源网 |网站地图

GMT+8, 2026-10-12 06:37 , Processed in 0.032860 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表