根因:订单记录原写在 web.db,与 Java 经 sync.php 高频写入共享同一 SQLite 文件,
产生文件级锁竞争(database is locked)。原 62f5323 用 busy_timeout=15s + 重试 hack
缓解,但 Java 持续写入仍会顶住 PHP 订单读查询,导致订单页长期转圈。
改动:
- 新增独立 orders.db 常量(ORDERS_DB_PATH),Java 永不读写此库
- core.php 新增 getOrdersDB() 连接独立库(WAL + busy_timeout=5s),建表并幂等迁移 web.db 历史订单
- recordCashierOrder() 改写写入 orders.db,订单写失败仅记日志返回空单号,绝不阻断购买主流程
- shop.php 将订单记录移出 web.db 事务,放到 COMMIT 之后写独立库
- cashier.php cashierOrderList() 直接读 orders.db,去掉 busy_timeout 与 5 次重试兜底 hack
- web.db 内旧 cashier_orders 表保留为历史死表(仅作迁移源),不再被读写
效果:订单查询与 Java 写入完全解耦,订单页不再受 CF/Java 锁影响而卡死。
48 lines
1.6 KiB
PHP
48 lines
1.6 KiB
PHP
<?php
|
|
/**
|
|
* Web通信系统 - 配置文件
|
|
*/
|
|
|
|
// ===== 安全密钥(插件和Web端必须一致) =====
|
|
define('SECRET_KEY', 'sdf1_web_comm_2026_ypshidifu');
|
|
|
|
// ===== Token配置 =====
|
|
define('TOKEN_EXPIRE_SECONDS', 600); // 10分钟
|
|
|
|
// ===== 数据库路径 =====
|
|
define('DB_PATH', __DIR__ . '/db/web.db');
|
|
// ★ 收银台订单独立库:与 web.db(Java 高频写入)彻底解耦,消除 SQLite 文件锁竞争
|
|
// 订单记录纯属 PHP 收银台自己的数据,Java 永不读写此库
|
|
define('ORDERS_DB_PATH', __DIR__ . '/db/orders.db');
|
|
|
|
// ===== 管理员认证 =====
|
|
define('ADMIN_USER', 'admin');
|
|
define('ADMIN_PASS', 'ypshidifu2026'); // 管理员密码
|
|
|
|
// ===== 游戏数据库路径(用于同步) =====
|
|
define('GAME_BOND_DB', 'D:/服务器/插件/bond.db');
|
|
define('GAME_LOGIN_DB', 'D:/服务器/插件/login.db');
|
|
define('GAME_SHOP_DIR', 'D:/服务器/插件/shop/');
|
|
|
|
// ===== Web子目录路径(如 /plugin 或 /test1,根目录则留空) =====
|
|
define('WEBSUB_DIR', '/plugin');
|
|
|
|
// ===== Java插件回调端口 =====
|
|
define('CALLBACK_PORT', 9090);
|
|
|
|
// ===== Java游戏服务器地址(PHP回调Java用) =====
|
|
define('GAME_SERVER_HOST', '127.0.0.1');
|
|
|
|
// ===== 辅助函数:构建相对路径 =====
|
|
function webPath($path = '') {
|
|
return trim(WEBSUB_DIR, '/') . ($path ? '/' . trim($path, '/') : '');
|
|
}
|
|
|
|
// ===== SMTP邮件配置 =====
|
|
define('SMTP_HOST', 'hwsmtp.exmail.qq.com');
|
|
define('SMTP_PORT', '465');
|
|
define('SMTP_USER', 'mcserver@ypshidifu.cn');
|
|
define('SMTP_PASS', 'sQ2ZiCZGq96xi9Sv');
|
|
define('SMTP_SENDER_NAME', 'Sdf1_login');
|
|
define('SMTP_USE_SSL', true);
|