文件
yjyf/scripts/patch_tp_php85.sh
linda 485b66e28f fix(admin): 修复后台 /admin 全站 404(缺失入口 + PHP8.5 编译期告警)
根因(两处叠加):
1) public/admin.php 缺失:FastAdmin 的 deny_module_list 含 admin,
   后台必须通过 admin.php 以 BIND_MODULE=admin 访问 → 之前任何 /admin 都 404
2) PHP 8.5 将 (boolean) 列为编译期 E_DEPRECATED,TP5 Request.php:1159 命中
   → Error::appError 升级为 ErrorException,在 Request 类「自动加载」瞬间抛出,
     早于任何模块级垫片,导致请求直接中断

修复:
- 新增 public/admin.php(标准 FastAdmin 入口,BIND_MODULE=admin)
- thinkphp/library/think/Request.php:1159 (boolean) → (bool),已备份
  并固化为可复现脚本 scripts/patch_tp_php85.sh
- application/admin/common.php 与 application/index/common.php 增加 PHP8 兼容垫片
  (application/common.php 不会被 TP5 自动加载,已还原为原样)
- nginx 伪静态新增 /admin、/admin/ → /admin.php(已备份 + nginx -t + 平滑 reload)

验证:/admin → 302 登录页、/admin.php/index/login → 200;
后台密码哈希与 DB 一致;验证码 /captcha 返回 PNG;163 项断言回归全通过
2026-10-28 16:37:16 +08:00

39 行
1.4 KiB
Bash

此文件含有不可见的 Unicode 字符

此文件含有人类无法区分的不可见的 Unicode 字符,但可以由计算机进行不同的处理。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

#!/bin/bash
# =============================================================================
# ThinkPHP 5.0 / PHP 8.5 兼容补丁
#
# 背景:PHP 8.5 将「非规范布尔强制转换 (boolean)」列为编译期 E_DEPRECATED。
# think\Error::appError() 会把它升级为 ErrorException,
# 而该告警发生在 Request 类「被自动加载(编译)」的瞬间,
# 早于任何 application/*/common.php 垫片,导致后台 /admin 与前台页面 404。
#
# 做法:把 vendor 里仅有的这一处 (boolean) 改为 (bool),语义完全等价。
#
# 用法:在服务器上执行 bash scripts/patch_tp_php85.sh [/path/to/project]
# 脚本幂等,可重复执行;修改前自动备份。
# =============================================================================
set -euo pipefail
ROOT="${1:-/www/wwwroot/yjyf.gzyakj.com.cn}"
FILE="$ROOT/thinkphp/library/think/Request.php"
if [ ! -f "$FILE" ]; then
echo "❌ 未找到 $FILE"
exit 1
fi
if grep -qF '(boolean) $data' "$FILE"; then
cp -a "$FILE" "$FILE.bak_$(date +%Y%m%d_%H%M%S)"
sed -i 's/(boolean) \$data/(bool) $data/g' "$FILE"
echo "✅ 已修复 (boolean) → (bool):$FILE"
else
echo "ℹ️ 无需修复(已是 (bool) 或结构已变化)"
fi
# 语法校验
if command -v php >/dev/null 2>&1; then
php -l "$FILE"
fi
echo "提示:如启用 opcache,请平滑重载 php-fpm 使补丁生效。"