承接 sydante/laravel-sensitive 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

sydante/laravel-sensitive

Composer 安装命令:

composer require sydante/laravel-sensitive

包简介

敏感词检查及过滤扩展包,采用 DFA 算法;可配置使用缓存,减少运行时 IO 占用;支持任意框架

README 文档

README

敏感词检查及过滤扩展包

特点

  • 采用 DFA 算法
  • 可配置使用缓存,减少重复构建敏感词库集合,减少资源占用
  • 支持非 Laravel 框架(不使用缓存功能,或者自定义缓存类)
  • 可通过配置文件管理配置,也可动态修改配置
  • 使用缓存时,修改配置后可通过命令行更新缓存
  • 使用 Facade 时,IDE 也能完美提示

系统要求

  • php 7.1 及以上版本
  • mbstring 扩展
  • composer

安装

通过 composer 安装

composer require sydante/laravel-sensitive

初始

Laravel

Laravel 使用包自动发现,所以不需要手动添加服务提供器

如果你没有使用自动发现,就必须手动添加服务提供器到 config/app.php 的 providers 数组中:

'providers' => [
    //...
    Sydante\LaravelSensitive\ServiceProvider::class,
],

如果你想使用 facade,添加如下代码到 config/app.php 的 aliases 数组中:

'aliases' => [
    //...
    'Sensitive' => Sydante\LaravelSensitive\Facades\Sensitive::class,
],

添加配置

Laravel

在项目目录下,使用如下命令发布配置:

php artisan vendor:publish --provider="Sydante\LaravelSensitive\ServiceProvider"

之后可以在 .env 中设置 SENSITIVE_CACHEtrue 来开启缓存功能

其他框架

可在实例化 Sydante\LaravelSensitive\Sensitive 时自行传入配置

更新缓存

在使用缓存时,如果修改了敏感词配置 wordsfile 或者修改了 file 配置的文件的内容时,需要通过如下命令更新缓存:

如果缓存了配置,需先更新配置缓存:php artisan config:cache

# 更新缓存
php artisan sensitive:cache

也可清理缓存,缓存被清理后,在下次被使用时会根据配置自动重建缓存

php artisan sensitive:clear

使用

示例代码

// Laravel 可直接通过如下方式获取实例
$sensitive = app(Sydante\LaravelSensitive\Sensitive::class);

$sensitive->filter('这是一个示例');

// 或者使用 Facade
\Sydante\LaravelSensitive\Facades\Sensitive::filter('这是一个示例');


// 其他骚操作:

// 1、动态修改敏感词,并在使用缓存时缓存
$sensitive->emptyTrieTreeMap()
    ->addWords(['test'])
    ->saveTrieTreeMap();

// 2、重置敏感词为初始化时的默认设置,并在使用缓存时缓存
$sensitive->resetTrieTreeMap()
    ->saveTrieTreeMap();

可用方法包括:

  • replaceCode(string $replaceCode): self 设置替换字符串
  • setDisturbs(array $disturbList = []): self 设置干扰因子
  • saveTrieTreeMap(): bool 如果使用缓存的话,保存当前敏感词库集合到缓存中
  • resetTrieTreeMap(): self 使用配置中的设置重置当前的敏感词库集合
  • emptyTrieTreeMap(): self 清空敏感词库集合
  • clearCache(): bool 清理敏感词库集合缓存
  • addWords(array $wordsList): self 添加敏感词
  • addWordsFromFile(string $filename): self 从文件中读取并添加敏感词
  • filter(string $text): string 过滤敏感词
  • search(string $text): array 查找对应敏感词

在其他框架中使用

不使用缓存

在不使用缓存时,可以直接在其他框架中直接使用 Sydante\LaravelSensitive\Sensitive

使用缓存

如果需要使用缓存功能,请自行编写实现了 Sydante\LaravelSensitive\SensitiveCacheInterface 接口的缓存类,在初始化 implements SensitiveCacheInterface 时传入类名到 cache_class 键中:

use Sydante\LaravelSensitive\Sensitive;
use Sydante\LaravelSensitive\SensitiveCacheInterface;

// 编写自定义的缓存类
class CustomSensitiveCache implements SensitiveCacheInterface
{
    // ...
}

// 使用
$sensitive = new Sensitive([
    'cache' => true,
    'words' => ['test'],
    // 使用自定义缓存类
    'cache_class' => CustomSensitiveCache::class,
]);

$sensitive->filter('我们来一个test'); // 我们来一个****

为什么要写这个包

在写这个包之前,我使用的是 yankewei/laravel-sensitive,在此感谢此包提供的敏感词处理思路。不过在实际使用中,压测发现此包 IO 占用太高,且函数调用频繁:

函数 调用次数 执行耗时 CPU时间 内存占用 内存巅峰
mb_substr 21099 13.9ms 28μs 660.0KB 161.4KB
str_replace 5858 4.2ms 10μs 213.9KB 136.0KB
mb_strlen 5771 3.4ms 2μs 1.1KB 112Bit
Yankewei\LaravelSensitive\Sensitive::getGeneretor 5771 0μs 56.4ms 0Bit 0Bit
feof 5770 0μs 9.4ms 0Bit 0Bit
fgets 5769 0μs 9.9ms 0Bit 0Bit

遂打算自己重写,将生成的敏感词库集合缓存起来,优化掉读敏感词文件和生成敏感词集合的部分,一次生成,即可重复使用。

Tips

可使用如下方式,来使干扰因子支持使用 SENSITIVE_DISTURBS 配置

// in config/sensitive.php

// 获取设置的干扰因子
$disturbs = env('SENSITIVE_DISTURBS');

if ($disturbs !== null) {
    // 将干扰因子解析成单个字符的列表
    $disturbs = array_values(array_unique(
        preg_split('//u', $disturbs)
    ));
}

return [
    // 是否使用缓存,默认 false
    'cache' => env('SENSITIVE_CACHE', false),

    // 干扰因子列表
    'disturbs' => $disturbs,

    // ...
];

如果缓存了配置,调整了 SENSITIVE_DISTURBS 后需要更新配置缓存:php artisan config:cache

sydante/laravel-sensitive 适用场景与选型建议

sydante/laravel-sensitive 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 1.69k 次下载、GitHub Stars 达 18, 最近一次更新时间为 2020 年 09 月 04 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 sydante/laravel-sensitive 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 sydante/laravel-sensitive 我们能提供哪些服务?
定制开发 / 二次开发

基于 sydante/laravel-sensitive 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 1.69k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 19
  • 点击次数: 3
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 18
  • Watchers: 1
  • Forks: 4
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2020-09-04