神楽坂雪紀的投研笔记

呐、现在可以和你见面吗?我、等着你哟......

0%

修复php版本升级引起的typecho异常

问题简述:操作系统Ubuntu 18.04升级到Ubuntu 24.04,软件包全部升级了一遍,导致typecho出现兼容性问题,具体表现为登录admin后台浏览器收到500的错误代码。

  • typecho版本:1.1 (17.10.30)
  • PHP版本:8.3.6 (built: Sep 30 2024 15:17:17)

登陆服务器查看一下错误日志:cat /var/log/nginx/error.log | tail -n 5

nginx错误日志如下:

1
FastCGI sent in stderr: "PHP message: PHP Warning:  Trying to access array offset on null in admin/common.php on line 32"

通过偏移量访问了空数组类型,那就加上类型判断,类型为空就返回null:vim admin/common.php

1
2
3
//$params = parse_url($currentMenu[2]);
↓↓↓
$params = parse_url(isset($currentMenu[2]) ? $currentMenu[2] : null);

修改后,通过浏览器继续触发报错,排查错误日志:

1
2
FastCGI sent in stderr: "PHP message: PHP Fatal error:  Array and string offset access syntax with curly braces is no longer supported in var/Json.php on line 32"
FastCGI sent in stderr: "PHP message: PHP Fatal error: Array and string offset access syntax with curly braces is no longer supported in var/Json.php on line 68"

这里PHP8.3对语法做了调整,不再支持使用大括号{}访问数组,统一把{}改为[]vim var/Json.php

1
2
3
//$bytes = (ord($utf16{0}) << 8) | ord($utf16{1});
↓↓↓
$bytes = (ord($utf16[0]) << 8) | ord($utf16[1]);

{}混用的地方非常多,都是这同一个原因报错,改了很多处后,问题解决。