·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

dz后台设置的词语过滤不起效果了

263 2
发表于 2021-12-16 15:35:23 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
common_word 表数据是有的./source/class/discuz/discuz_censor.php 文件中
  1. public function __construct() {    global $_G;    loadcache(array('censor', 'bbcodes_display'));    $this->censor_words = !empty($_G['cache']['censor']) ? $_G['cache']['censor'] : array();    $this->bbcodes_display = $_G['cache']['bbcodes_display'][$_G['groupid']];
复制代码
但是 $this->censor_words 获取到的内容是空数组


想问下 $_G['cache']['censor'] 这个数组在哪可以查看和设置,更新过缓存也没用
我要说一句 收起回复

评论2

Discuz智能体Lv.8 发表于 4 天前 | 查看全部
在Discuz!中,`$_G` 是一个全局变量数组,包含了系统运行时的各种配置和数据。`$_G` 数组的内容通常是通过 `loadcache()` 函数加载的缓存数据。你提到的问题是关于词语过滤不起作用,并且 `$_G` 数组中的 `censor` 数据为空。以下是一些可能的原因和解决方法:

### 1. 检查缓存是否正确加载
`$_G` 数组中的 `censor` 数据是通过 `loadcache('censor')` 加载的。如果 `censor` 缓存没有正确加载,可能会导致 `$_G['censor']` 为空。

你可以尝试手动更新缓存:
- 进入Discuz!后台 -> 工具 -> 更新缓存,确保所有缓存都已更新。
- 你也可以通过代码手动更新缓存:
  1. loadcache('censor');
复制代码


### 2. 检查 `common_word` 表数据
确保 `common_word` 表中有正确的过滤词数据。你可以通过数据库管理工具(如phpMyAdmin)直接查看 `common_word` 表,确保数据存在且格式正确。

### 3. 检查 `censor` 缓存生成逻辑
`censor` 缓存是通过 `source/class/table/table_common_word.php` 中的 `fetch_all_by_type()` 方法生成的。你可以检查这个方法是否正常工作,确保缓存数据能够正确生成。

### 4. 检查 `discuz_censor.php` 文件
你提到的 `discuz_censor.php` 文件中的 `__construct()` 方法,确保 `$_G['censor']` 被正确赋值。你可以尝试在 `__construct()` 方法中添加调试代码,检查 `$_G['censor']` 是否被正确加载:
  1. public function __construct() {
  2.     global $_G;
  3.     loadcache(array('censor', 'bbcodes_display'));
  4.     $this->censor_words = !empty($_G['censor']) ? $_G['censor'] : array();
  5.     $this->bbcodes_display = $_G['bbcodes_display'];
  6.    
  7.     // 调试代码
  8.     print_r($_G['censor']);
  9.     exit;
  10. }
复制代码


### 5. 检查插件或模板冲突
有时候,某些插件或模板可能会修改 `$_G` 数组的内容,导致 `censor` 数据丢失。你可以尝试禁用所有插件,切换到默认模板,看看问题是否依然存在。

### 6. 检查文件权限
确保 `data/cache/` 目录及其子目录有正确的写入权限,以便系统能够正常生成缓存文件。

### 7. 检查 `config_global.php` 配置
确保 `config_global.php` 中的缓存配置正确,特别是 `$_config['cache']['type']` 和 `$_config['cache']['cachedir']`。

### 8. 手动更新 `censor` 缓存
如果以上方法都无效,你可以尝试手动更新 `censor` 缓存:
  1. C::t('common_word')->updatecache();
复制代码


### 总结
通过以上步骤,你应该能够找到 `$_G['censor']` 为空的原因并解决问题。如果问题依然存在,建议进一步检查系统日志或联系专业开发者进行排查。

如果你有其他问题或需要进一步的帮助,请随时提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复
Discuz智能体Lv.8 发表于 前天 10:07 | 查看全部
在Discuz!中,`$_G` 是一个全局变量数组,包含了当前站点的各种配置和缓存数据。你提到的 `$_G['cache']['censor']` 是存储词语过滤规则的地方。如果 `$_G['cache']['censor']` 是空的,那么词语过滤功能就无法正常工作。

### 1. 检查缓存是否正常加载
首先,确保缓存已经正确加载。你可以在 `source/class/discuz/discuz_censor.php` 文件中添加一些调试代码,检查 `$_G['cache']['censor']` 是否为空。

  1. public function __construct() {
  2.     global $_G;
  3.     loadcache(array('censor', 'bbcodes_display'));
  4.    
  5.     // 调试代码
  6.     if (empty($_G['cache']['censor'])) {
  7.         echo "censor cache is empty!";
  8.         exit;
  9.     }
  10.    
  11.     $this->censor_words = !empty($_G['cache']['censor']) ? $_G['cache']['censor'] : array();
  12.     $this->bbcodes_display = $_G['cache']['bbcodes_display'];
  13. }
复制代码


如果输出 `censor cache is empty!`,说明缓存没有正确加载。

### 2. 手动更新缓存
你可以尝试手动更新缓存,确保 `censor` 缓存被正确加载。

- 进入Discuz!后台,找到 `工具` -> `更新缓存`,然后点击 `更新缓存` 按钮。
- 或者通过命令行工具更新缓存(如果你有命令行访问权限):

  1. php /path/to/discuz/script/update_cache.php
复制代码


### 3. 检查 `common_word` 表
确保 `common_word` 表中有数据,并且数据格式正确。你可以通过数据库管理工具(如phpMyAdmin)查看 `common_word` 表的内容。

### 4. 检查 `censor` 缓存的生成逻辑
如果缓存更新后仍然无效,可以检查 `source/function/cache/cache_censor.php` 文件,确保缓存生成逻辑没有问题。

  1. function build_cache_censor() {
  2.     $data = array();
  3.     $query = DB::query("SELECT * FROM ".DB::table('common_word')." WHERE type IN ('banned', 'mod', 'filter')");
  4.     while($word = DB::fetch($query)) {
  5.         $data[$word['type']][$word['find']] = $word['replacement'];
  6.     }
  7.     save_syscache('censor', $data);
  8. }
复制代码


### 5. 检查 `$_G` 数组的初始化
`$_G` 数组是在 `source/class/discuz/discuz_application.php` 文件中初始化的。你可以检查这个文件,确保 `$_G` 数组的初始化逻辑没有问题。

### 6. 检查插件冲突
如果你安装了某些插件,可能会影响到 `$_G` 数组的初始化或缓存加载。尝试禁用所有插件,看看问题是否依然存在。

### 7. 检查文件权限
确保 `data/cache` 目录及其子目录有正确的写入权限,以便缓存文件能够正常生成。

### 8. 检查服务器环境
如果以上方法都无效,可能是服务器环境问题。检查PHP版本、内存限制、文件权限等,确保它们符合Discuz!的要求。

### 总结
通过以上步骤,你应该能够找到 `$_G['cache']['censor']` 为空的原因。如果问题依然存在,建议在DZ插件网(https://www.dz-x.net/)上寻求更多帮助,或者查看相关文档和社区讨论。

希望这些建议能帮助你解决问题!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

图文热点
关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:3.144.106.95,GMT+8, 2025-3-24 16:44 , Processed in 0.244229 second(s), 80 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表