原有的函数为:
/** thumbs */
function get_webthumb(web_pic) { global options;
if (!empty($web_pic)) { $strurl = $options['site_root'].$options['upload_dir'].'/'.$web_pic; } else { $strurl = $options['site_root'].'public/images/nopic.gif'; } return $strurl;
}
get_webthumb() 函数用于生成网站的图片路径(缩略图或实际图片)
逻辑:如果传入的 $web_pic 不为空,则将图片路径拼接为 $options['site_root'] . $options['upload_dir'] . '/' . $web_pic。
如果 $web_pic 为空,则返回默认的“无图片”路径 $options['site_root'] . 'public/images/nopic.gif'。
这里的逻辑会无条件地在 $web_pic 前添加 $options['site_root'] 和 $options['upload_dir'](可能是 /uploads/ 或类似路径)。因此,如果 $web_pic 是一个外部链接(如 https://i.uzkoo.com/logo/3/202505/6831080830b0c.png),最终路径会变成类似 /uploads/https://i.uzkoo.com/...
我们需要在 get_webthumb() 函数中添加逻辑,检查 $web_pic 是否为外部链接(以 http:// 或 https:// 开头)。如果是外部链接,则直接返回原始值,不拼接前缀路径。
如果系统中存储的本地图片路径已经包含了 $options['upload_dir'](如 /uploads/),可能会导致路径重复拼接(如 /uploads//uploads/image.jpg)。为避免这种情况,可以进一步优化代码,检查 $web_pic 是否已经包含 $options['upload_dir'] 前缀:
修改后的 get_webthumb() 函数
/** thumbs */ function get_webthumb($web_pic) { global $options; if (!empty($web_pic)) { // 检查是否为外部链接(以http://或https://开头) if (preg_match('/^https?:///i', $web_pic)) { return $web_pic; // 外部链接直接返回,不加前缀 } // 否则拼接本地路径 $strurl = $options['site_root'] . $options['upload_dir'] . '/' . $web_pic;
} else { $strurl = $options['site_root'] . 'public/images/nopic.gif';
} return $strurl;
}
解释
额外优化(可选)
/** thumbs */ function get_webthumb($web_pic) { global $options; if (!empty($web_pic)) { // 检查是否为外部链接(以http://或https://开头) if (preg_match('/^https?:///i', $web_pic)) { return $web_pic; // 外部链接直接返回,不加前缀 } // 检查是否已经包含 upload_dir 前缀 $upload_dir_prefix = $options['upload_dir'] . '/'; if (strpos($web_pic, $upload_dir_prefix) === 0) { $strurl = $options['site_root'] . $web_pic;
} else { $strurl = $options['site_root'] . $upload_dir_prefix . $web_pic;
}
} else { $strurl = $options['site_root'] . 'public/images/nopic.gif';
} return $strurl;
}
优化逻辑
函数路径:/www/wwwroot/95dir.com/source/module/prelink.php
拉到最下面替换掉原有的get_webthumb() 函数为上面提供的新函数