#!/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 使补丁生效。"