1.安装libiconv,这个是libdatrie的依赖项
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz tar zxvf libiconv-1.14.tar.gz cd libiconv-1.14 ./configure make make install
2. 安装:libdatrie ( http://linux.thai.net/~thep/datrie/datrie.html#Download )
这个需要手动下载,然后上传,没找到wget的地址
tar zxf libdatrie-0.2.4.tar.gz cd libdatrie-0.2.4 ./configure --prefix=/usr/local make make install
编译出现错误 trietool.c:125: undefined reference to `libiconv'
解决办法为: ./configure LDFLAGS=-L/usr/local/lib LIBS=-liconv
还有可能是服务器没有安装gcc
centos 上面直接yum instal gcc -c++
3. 安装 trie_filter 扩展
由于官方trie_filter扩展对中文支持的不是很好,所以在git上找到了一个在官方扩展上面改写的扩展经过测试没有问题
安装方法如下:
https://github.com/wulijun/php-ext-trie-filter 在这里下载源码包
phpize ./configure --with-php-config=/usr/local/bin/php-config make make install
这里编译的时候,没有出错,但是到了make这一部就出错了
由于PHP7.0的扩展库兼容问题,这里会报语法错误
解决办法:
打开trie_filter.c
把原来的代码
1、 static void php_trie_filter_dtor(ZEND_RESOURCE *rsrc TSRMLS_DC)
{
Trie *trie = (Trie *)rsrc->ptr;
trie_free(trie);
}
改成
static void php_trie_filter_dtor(zend_resource *rsrc TSRMLS_DC)
{
Trie *trie = (Trie *)rsrc->ptr;
trie_free(trie);
}
2、找到trie_filter_search
把原来的
ZEND_FETCH_RESOURCE(trie, Trie *, &trie_resource, -1, PHP_TRIE_FILTER_RES_NAME, le_trie_filter);
改成
zend_fetch_resource(Z_RES_P(trie_resource), PHP_TRIE_FILTER_RES_NAME, le_trie_filter);
这里是因为在php7.0以后的版本把ZEND_FETCH_RESOURCE方法去掉了,改成了小写之后,里面的参数变掉了
在 PHP 7 中删除了原有的 ZEND_FETCH_RESOURCE 宏,直接使用函数 zend_fetch_resource ,而且解析方式也变得简单了很多,想比 PHP 5 要高效很多,后面我们再通过图片分析对比。
参数 | 含义 |
res | 资源指针 |
resource_type_name | 该类资源的字符串别名 |
resource_type | 该类资源的类型 id |
3、把源代码中的所有的ZEND_FETCH_RESOURCE都改成zend_fetch_resource
到这里再make & make install就没问题了
敏感词库安装完成之后就可以测试了