You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;
}

额外建议

  1. 检查$fontxy数组的定义,确认是否遗漏了空格、O、Y这些字符的配置项
  2. 可以提前给$fontxy设置全局默认配置,减少重复判断
  3. 若需要支持全字符,可以通过循环补全常见ASCII码的默认配置

内容的提问来源于stack exchange,提问作者smallbee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 12:41:24