关于插件开发,model文件夹下的文件重复引入导致500错误的问题反馈 [复制链接]

二级用户组

比如插件lecms_spider里面的hook文件model_inc_file.php,代码如下:

APP_PATH.'plugin/lecms_spider/model/spider.func.php',

会导致服务器内部错误,问题定位到index.php里面的代码块:

// 兜底:确保已启用插件的 Service 类被加载
// ponytail: model.inc.php 的 model_inc_file hook 注入可能因 tmp 缓存陈旧而丢失
// (tmp/model.inc.php 未重新编译,但 tmp/model_xxx.func.php 重新编译注入了 Service 调用),
// 两者不一致会导致 Class not found fatal 崩溃,触发插件自动禁用机制。
// 此处用 class_exists 守卫兜底,已加载的类不会重复 include;插件 model/ 目录文件均为纯类定义(无 hook 占位符),直接 include 安全
$_plugin_paths_fallback = plugin_paths_enabled();
foreach ($_plugin_paths_fallback as $_path_fb => $_pconf_fb) {
	$_model_dir_fb = $_path_fb . '/model';
	if (!is_dir($_model_dir_fb)) continue;
	foreach (glob($_model_dir_fb . '/*.php') as $_service_file_fb) {
		$_class_name_fb = ucfirst(basename($_service_file_fb, '.php'));
		if (!class_exists($_class_name_fb, false)) {
			include_once $_service_file_fb;
		}
	}
}

这里也会自动引入spider.func.php,导致重复引入,提示里面的函数重复定义!

解决方案:

1、插件开发不需要使用model_inc_file.php引入model文件夹下面的文件?这个是否合理?还是xiunox的插件开发和xiunobbs的插件开发差异,不能按xiunobbs的方式开发。

2、更新程序index.php里面的代码,过滤 *.func.php的自动引入

// 兜底:确保已启用插件的 Service 类被加载
// ponytail: model.inc.php 的 model_inc_file hook 注入可能因 tmp 缓存陈旧而丢失
// (tmp/model.inc.php 未重新编译,但 tmp/model_xxx.func.php 重新编译注入了 Service 调用),
// 两者不一致会导致 Class not found fatal 崩溃,触发插件自动禁用机制。
// 此处用 class_exists 守卫兜底,已加载的类不会重复 include;插件 model/ 目录文件均为纯类定义(无 hook 占位符),直接 include 安全
$_plugin_paths_fallback = plugin_paths_enabled();
foreach ($_plugin_paths_fallback as $_path_fb => $_pconf_fb) {
	$_model_dir_fb = $_path_fb . '/model';
	if (!is_dir($_model_dir_fb)) continue;
	foreach (glob($_model_dir_fb . '/*.php') as $_service_file_fb) {
		if (substr(basename($_service_file_fb), -9) === '.func.php') continue; 
		$_class_name_fb = ucfirst(basename($_service_file_fb, '.php'));
		if (!class_exists($_class_name_fb, false)) {
			include_once $_service_file_fb;
		}
	}
}

Bug反馈
程序版本:
1.1.6
PHP版本:
php8.5
MySql:
5.7
复现步骤:
服务器错误,插件里面model文件夹下的 *.func.php重复引入
预期结果:
最新回复

请先登录后再回复 登录

uid:23 二级用户组
关注
发帖 14
评论 9
粉丝 1
关注 0
发新帖
目录
关于插件开发,model文件夹下的文件重复引入导致500错误的问题反馈