PHP日志出现Undefined offset等报错求助:脚本正常但日志报错
问题分析与修复方案
报错原因
你遇到的几个PHP Notice本质是同一个问题:
Undefined offset: 79/89/32:$fontxy数组中不存在对应ASCII码(79是字符O、89是Y、32是空格)的键Trying to access array offset on value of type null:当$fontxy[$c]为null时,直接访问了它的x/y/w子键
脚本能正常运行是因为PHP的Notice级错误不中断执行,但这些报错会污染日志,也可能隐藏潜在的逻辑漏洞。
修复代码
在使用$fontxy[$c]之前添加存在性校验,同时可以给缺失的字符设置处理逻辑(比如跳过或用默认配置):
function right2img($color,$text,$pos,$font,$fontxy,$im){ $letters = imagecreatefromstring(base64_decode($font)); $rgb = getRGB($color); $index = imagecolorexact($letters, 0, 0, 0); imagecolorset ($letters, $index, $rgb[0], $rgb[1], $rgb[2]); for($i=0;$i<strlen($text);$i++){ $c = ord($text[$i]); // 校验当前字符的配置是否完整 if (!isset($fontxy[$c]) || !isset($fontxy[$c]['x'], $fontxy[$c]['y'], $fontxy[$c]['w'])) { // 可选逻辑:跳过无配置的字符 continue; // 或者设置默认配置,比如: // $charConfig = ['x' => 0, 'y' => 0, 'w' => 8]; } else { $charConfig = $fontxy[$c]; } imagecopy ($im, $letters, $pos, 5, $charConfig["x"], $charConfig["y"], $charConfig["w"], 5); $pos+= $charConfig["w"]; } return $im; }
额外建议
- 检查
$fontxy数组的定义,确认是否遗漏了空格、O、Y这些字符的配置项 - 可以提前给
$fontxy设置全局默认配置,减少重复判断 - 若需要支持全字符,可以通过循环补全常见ASCII码的默认配置
内容的提问来源于stack exchange,提问作者smallbee
相关产品推荐
相关产品推荐

