当前位置:网站首页 >  攻略

PHPCMS全场景采集重复内容过滤设置实操指南 零门槛改完即可直接生效

时间:2026年05月23日 20:34:42 来源:易频IT社区

前置准备

本指南适配PHPCMS V9全版本(含GBK、UTF-8编码),操作前需完成以下准备工作,避免操作失误导致数据丢失:

  • 备份采集规则配置文件:通过FTP/宝塔文件管理器下载/caches/configs/collection.php存到本地
  • 备份采集数据表,执行以下MySQL命令(替换对应参数即可): ``` mysqldump -u 你的数据库用户名 -p 你的数据库名 v9_collection > /自定义备份路径/collection_bak.sql ```
  • 登录PHPCMS后台,地址为你的站点域名/admin.php,输入超级管理员账号密码进入系统

方案1:单节点重复过滤配置(零代码)

适用于仅需要单个采集节点内部过滤重复内容的场景,无需修改任何代码,1分钟即可配置完成:

  1. 进入后台左侧菜单【内容】-【采集管理】-【采集节点管理】,找到需要配置的采集节点,点击右侧修改按钮
  2. 下拉页面到最底部的高级设置板块,找到「重复内容判断依据」选项,根据需求选择对应规则:
    • 标题相同:仅判断采集到的标题与已采集内容是否一致,适合内容高度标准化的场景
    • 内容相同:仅判断正文内容是否一致,适合标题可能重复但内容不同的场景
    • 标题+内容相同:同时匹配标题和正文,过滤精度最高,推荐绝大多数场景使用
  3. 找到「重复内容处理方式」选项,根据需求选择:
    • 不采集:检测到重复内容直接跳过,适合需要保留原有内容不变的场景
    • 更新已有内容:检测到重复内容时用新采集的内容覆盖原有内容,适合需要同步源站更新的场景
  4. 必须勾选「启用重复校验」前面的复选框,否则以上配置全部不生效,最后点击底部「确定」保存节点配置即可

方案2:跨节点全局重复过滤配置(仅改1行代码)

适用于多个采集节点采集同源内容,需要全站范围过滤重复的场景,仅需修改1行核心代码即可实现:

  1. 通过文件管理器打开路径/phpcms/modules/collection/collection.class.php文件
  2. 找到公共函数public function _check_exist($title, $content = '', $url = ''),定位到以下原始代码: ```php $where = "`siteid` = '$this->siteid' AND `nodeid` = '$this->nodeid' AND "; ```
  3. 删除代码中的节点ID判断条件,修改为以下内容: ```php $where = "`siteid` = '$this->siteid' AND "; ```
  4. 保存修改后的文件,回到后台点击左侧菜单【设置】-【更新缓存】,全选所有缓存选项点击确定完成更新

PHPCMS全场景采集重复内容过滤设置实操指南 零门槛改完即可直接生效

配置完成后,所有采集节点共用同一套重复判断规则,任意节点采集到全站已存在的内容都会按配置的规则处理。

方案3:自定义字段重复过滤配置(适配个性化需求)

适用于需要通过来源URL、源站文章ID等自定义字段判断重复的场景,步骤如下:

  1. 如果需要用到数据库不存在的自定义字段(如源站文章ID),先执行SQL语句给采集表加对应字段,示例为添加source_id字段: ```sql ALTER TABLE `v9_collection` ADD COLUMN `source_id` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '源站文章ID' AFTER `url`; ```
  2. 进入采集节点修改页面,打开【内容页规则】板块,添加对应自定义字段的采集规则,确保能正常采集到字段值
  3. 再次打开/phpcms/modules/collection/collection.class.php文件的_check_exist函数,找到重复判断逻辑的原始代码: ```php if($this->setting['repeat_type'] == 1) { $where .= "`title` = '".addslashes($title)."'"; } elseif($this->setting['repeat_type'] == 2) { $where .= "`content` = '".addslashes($content)."'"; } elseif($this->setting['repeat_type'] == 3) { $where .= "`title` = '".addslashes($title)."' AND `content` = '".addslashes($content)."'"; } ```
  4. 修改判断逻辑,加入自定义字段的判断,示例为优先用来源URL判断重复的代码: ```php // 优先判断来源URL是否重复 if(!empty($url)) { $where .= "`url` = '".addslashes($url)."'"; } else { // URL为空时沿用原有判断规则 if($this->setting['repeat_type'] == 1) { $where .= "`title` = '".addslashes($title)."'"; } elseif($this->setting['repeat_type'] == 2) { $where .= "`content` = '".addslashes($content)."'"; } elseif($this->setting['repeat_type'] == 3) { $where .= "`title` = '".addslashes($title)."' AND `content` = '".addslashes($content)."'"; } } ``` 如果需要用自定义的source_id判断,只需将URL判断部分替换为$where .= "`source_id` = '".addslashes($source_id)."';即可
  5. 保存文件后更新全站缓存,配置生效

效果验证与异常排查

效果验证步骤

  • 单节点验证:进入采集节点点击【测试采集】,选择3条已经采集过的内容发起采集,若采集结果显示内容重复,已跳过则配置生效
  • 跨节点验证:用两个不同的采集节点采集同一篇内容,若第二个节点采集时提示重复则全局过滤生效
  • 自定义字段验证:测试采集时查看字段采集结果是否有值,重复内容是否被正常过滤即可

常见异常排查

  • 配置后仍采集重复内容:首先检查采集节点是否勾选了启用重复校验,其次确认是否更新了全站缓存,最后检查修改的是否为/phpcms/modules/collection/下的源文件,而非缓存目录下的文件
  • 误判正常内容为重复:检查重复判断依据是否设置过松,比如仅用标题判断可能出现不同内容同标题的情况,切换为标题+内容或自定义URL/ID判断即可解决
  • 采集时提示SQL错误:检查修改的代码中SQL语句是否存在引号未闭合、字段名与数据库不一致的问题,还原备份的文件即可恢复正常
  • 自定义字段判断不生效:先检查数据库是否成功添加对应字段,再检查采集节点的内容规则是否能正常采集到该字段的值即可

注意:所有文件修改时需用UTF-8无BOM编码保存,避免出现乱码问题,修改前务必提前备份文件和数据,防止操作失误导致功能异常。

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图