DiscuzX2 附件存储目录是缓存为绝对路径的,而且缓存存在数据库里,
如果测试环境(预发布环境)和线上环境用同一份数据库数据,
但附件存储目录绝对路径不一致,会给测试造成问题;
所以针对这个问题,可以做如下修改,将附件存储路径缓存为相对路径,方便测试:
1、查找存储该设置的地方
查找"save_syscache('setting'"
cache_setting.php
line 56 //如果是相对目录,改为绝对目录
$setting['svalue'] = str_replace('\\', '/', substr($setting['svalue'], 0, 2) == './' ? DISCUZ_ROOT.$setting['svalue'] : $setting['svalue']);
2、查找使用该设置的地方
查找"attachdir"
该设置有两种使用方式
getglobal('setting/attachdir')
$_G['setting']['attachdir']
而 getglobal() 是用 $_G 实现的,
所以只要保证 $_G['setting']['attachdir'] 设置不变,则不影响原来功能;
3、查找初始化$_G['setting']['attachdir']的地方
查找字符串"$_G ="
class_core.php
line 113
$_G 初始化,'setting' => array()
以上只是初始化key,略过;
查找字符串"$_G['setting'] ="
function_core.php
line 677
$_G['setting'] = $data;
4、修改方案
存储时保存相对路径;
初始化时修改为绝对路径;
使用时无需改动;
(相当于移动“改为绝对路径”这行逻辑代码)
cache_setting.php
line 56
$setting['svalue'] = str_replace('\\', '/', substr($setting['svalue'], 0, 2) == './' ? DISCUZ_ROOT.$setting['svalue'] : $setting['svalue']);
改为
$setting['svalue'] = str_replace('\\', '/', $setting['svalue']);
function_core.php
line 677
$_G['setting'] = $data;
下面加一行
if (isset($_G['setting']['attachdir']) && substr($_G['setting']['attachdir'], 0, 2) == './') $_G['setting']['attachdir'] = DISCUZ_ROOT.$_G['setting']['attachdir'];
既然折腾了,就写下。