标题:PHP实现敏感词过滤系统 出处:沧海一粟 时间:Sun, 06 Nov 2016 22:44:31 +0000 作者:jed 地址:http://www.dzhope.com/post/1028/ 内容: 安装说明 安装PHP扩展 trie_filter,安装教程 http://blog.41ms.com/post/39.html 安装PHP扩展 swoole,安装教程 http://www.swoole.com/ 代码说明 1、敏感词库维护更新脚本: reload_dict.php,提供自动更新字典库到trie-tree文件的过程 $v) { $word = substr($str, $v[0], $v[1]); if (!in_array($word, $result)) { $result[] = $word; } } return $result; } } 3、对外提供过滤HTTP访问接口 filter.php,使用swool,对外提交过滤接口访问 on('Request', function($request, $response) { // 接收get请求参数 $content = isset($request->get['content']) ? $request->get['content']: ''; $result = ''; if (!empty($content)) { // 字典树文件路径,默认当时目录下 $tree_file = 'blackword.tree'; // 清除文件状态缓存 clearstatcache(); // 获取请求时,字典树文件的修改时间 $new_mtime = filemtime($tree_file); // 获取最新trie-tree对象 $resTrie = FilterHelper::getResTrie($tree_file, $new_mtime); // 执行过滤 $arrRet = trie_filter_search_all($resTrie, $content); // 提取过滤出的敏感词 $a_data = FilterHelper::getFilterWords($content, $arrRet); $result = json_encode($a_data); } // 定义http服务信息及响应处理结果 $response->cookie("User", "W.Y.P"); $response->header("X-Server", "W.Y.P WebServer(Unix) (Red-Hat/Linux)"); $response->header('Content-Type', 'Content-Type: text/html; charset=utf-8'); $response->end($result); }); $serv->start(); 测试效果 词库内容: 点击在新窗口中浏览此图片 http://www.dzhope.com/attachment.php?fid=84 接口响应过滤结果: 点击在新窗口中浏览此图片 http://www.dzhope.com/attachment.php?fid=85 尝试更新敏感词库,接口程序已自动加载最新敏感词库,保证过滤效果 点击在新窗口中浏览此图片 http://www.dzhope.com/attachment.php?fid=86 ab测试结果 词库:200W敏感词 服务器配置(CPU:1核;内存:1024 MB;带宽:1Mbps) 点击在新窗口中浏览此图片 http://www.dzhope.com/attachment.php?fid=87 Generated by Bo-blog 2.1.1 Release