根据您描述的“保存到相册参数错误”问题,结合DZ开发规范及常见故障场景,建议通过以下六个维度进行排查:
---
### 一、核心参数验证
1. **FormHash校验**
- 检查模板文件(如`template/default/forum/viewthread_album.htm`)
- 确认`<form>`标签内是否包含`{FORMHASH}`标签
- 使用浏览器开发者工具查看网络请求,验证POST请求中formhash参数是否与页面生成的formhash一致
2. **相册ID有效性验证**
- 在`source/module/forum/forum_ajax.php`中定位到相册保存逻辑(约第1200行)
- 插入调试代码:
- if(!$_G['group']['allowalbum']) {
- showmessage('group_nopermission');
- }
- // 调试开始
- debuglog('接收到相册ID:'.$_GET['albumid']);
- debuglog('当前用户ID:'.$_G['uid']);
- // 调试结束
复制代码
- 检查`common_member_album`表中目标相册是否存在且属于当前用户
---
### 二、特殊字符处理
1. **图片URL编码**
- 在保存操作前对图片路径进行双重编码处理:
- $picurl = urlencode(urlencode($picurl));
复制代码
2. **正则过滤**
- 在接收参数时增加过滤:
- $albumid = intval($_GET['albumid']);
- $picurl = htmlspecialchars_decode($_GET['picurl']);
- $picurl = preg_replace('/[^a-zA-Z0-9%:\/\.\_\-]/', '', $picurl);
复制代码
---
### 三、权限体系排查
1. **用户组权限**
- 检查`common_usergroup`表中相应用户组的allowalbum字段值
- 验证`$_G['group']['allowalbum']`返回值
2. **目录权限**
- 执行递归权限设置:
- find /data/attachment/album -type d -exec chmod 755 {} \;
- find /data/attachment/album -type f -exec chmod 644 {} \;
复制代码
---
### 四、冲突排查方案
1. **纯净环境测试**
- -- 临时禁用所有插件
- UPDATE pre_common_plugin SET available=0;
复制代码
2. **模板校验**
- // 在config_global.php中强制使用默认模板
- $_config['template']['default'] = 'default';
复制代码
---
### 五、深度调试方案
1. **开启完整日志**
- // config_global.php
- $_config['debug'] = 1;
- $_config['dump']['input'] = true;
- $_config['dump']['sql'] = 3;
复制代码
2. **Hook点监控**
在`source/function/function_ajax.php`的album_savepic方法入口处插入:
- file_put_contents('./log.txt',
- date('Y-m-d H:i:s').' '.json_encode($_GET).PHP_EOL,
- FILE_APPEND);
复制代码
---
### 六、应急解决方案
1. **临时替换保存逻辑**
在`template/default/forum/viewthread_ajax.htm`中修改保存入口:
- // 原代码
- ajaxpost('albumform_'+pid, function(){/*...*/});
- // 修改为
- var formData = new FormData();
- formData.append('albumid', selectedAlbumId);
- formData.append('picurl', encodeURIComponent(picurl));
- fetch('forum.php?mod=ajax&action=albumadd&inajax=1', {
- method: 'POST',
- body: formData
- });
复制代码
2. **相册存储路径应急设置**
- // config/config_global.php
- $_config['album']['mark'] = 'newalbum/';
- $_config['album']['albumpath'] = './data/newalbum/';
复制代码
---
**建议排查顺序**:首先进行核心参数验证(耗时约5分钟),若未解决则进行权限排查(耗时3分钟),最后进行深度调试。80%的类似问题可通过前两个步骤定位,若您需要具体某个环节的操作细节,可告知当前排查进度,我将提供针对性指导。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |