配置环境
本文操作基于以下环境,请注意部分软件版本已较旧,建议在类似环境中测试或酌情升级。
- 操作系统:CentOS release 6.9 64bit (Final)
- 内核版本:Linux version 2.6.32-696.23.1.el6.x86_64
- Web 服务器:nginx/1.12.2
- PHP 版本:5.3.3 (Zend Engine v2.3.0)
- 数据库:Mysql Server version: 5.5.56
1. 安装 SCWS 中文分词系统
首先通过 SSH 连接到已配置好 LNMP 环境的服务器。
建议使用 screen 或 tmux 会话,防止编译过程中连接中断:
screen -S soxiaohost
进入计划用于搜索引擎的网站目录(此处以示例目录为例):
cd /home/wwwroot/so.blog.youquso.com
下载 SCWS 源码包(请注意,以下链接可能已失效,建议从可靠镜像获取):
wget http://www.xunsearch.com/scws/down/scws-1.2.3.tar.bz2
解压并进入源码目录:
tar xvjf scws-1.2.3.tar.bz2
cd scws-1.2.3
编译并安装到 /usr/local/scws:
./configure --prefix=/usr/local/scws
make
make install
检查是否安装成功:
ls -al /usr/local/scws/lib/libscws.la
如果文件存在,通常表示库文件安装成功。可以进一步测试命令行工具:
/usr/local/scws/bin/scws -h
正常应显示帮助信息,包含版本号(scws-cli/1.2.3)及用法说明。
下载并安装词典
进入 SCWS 的配置目录,下载并解压 GBK 和 UTF-8 编码的中文词典:
cd /usr/local/scws/etc
wget http://www.xunsearch.com/scws/down/scws-dict-chs-gbk.tar.bz2 && tar xvjf scws-dict-chs-gbk.tar.bz2
wget http://www.xunsearch.com/scws/down/scws-dict-chs-utf8.tar.bz2 && tar xvjf scws-dict-chs-utf8.tar.bz2
解压后,词典文件(*.xdb)应位于 /usr/local/scws/etc 目录中。
2. 安装 PHP 扩展
首先安装必要的编译工具和 PHP 开发包:
yum install epel-release -y
yum update -y
yum install php-devel autoconf automake -y
进入 SCWS 源码的 PHP 扩展目录:
cd /home/wwwroot/so.blog.youquso.com/scws-1.2.3/phpext
执行 phpize 准备扩展编译环境(请根据你的 PHP 安装路径调整):
/usr/local/php/bin/phpize
配置编译选项,指定 SCWS 的安装路径:
./configure --with-scws=/usr/local/scws
注意:如果 PHP 安装在非标准路径,需要在 configure 命令后加上 --with-php-config=$php_prefix/bin/php-config。
编译并安装:
make
make test # 可选,运行测试
make install # 需要 root 权限
如果编译成功,make install 会输出类似以下信息,并提示扩展模块(scws.so)的安装路径。
Installing shared extensions: /usr/lib64/php/modules/
配置 PHP 加载扩展
编辑 PHP 配置文件(路径可能不同):
vi /usr/local/php/etc/php.ini
在文件末尾添加以下配置:
[scws]
; 注意:请确保 extension_dir 设置正确,或直接使用 scws.so 的绝对路径。
extension = /usr/lib64/php/modules/scws.so
scws.default.charset = utf-8
scws.default.fpath = /usr/local/scws/etc
保存并退出编辑器,重启 PHP-FPM 服务使配置生效:
/etc/init.d/php-fpm restart
验证扩展是否加载成功:
php -m | grep scws
或在网页中通过 phpinfo() 查看是否有 scws 相关模块信息。
常见问题:32位/64位不匹配
如果重启 PHP-FPM 时出现类似以下错误:
PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/scws.so' - /usr/lib64/php/modules/scws.so: undefined symbol: zend_new_interned_string
这通常是因为 PHP 与扩展的位数(32位/64位)不匹配。解决方法是在编译 PHP 扩展时,在 ./configure 命令中明确指定 PHP 配置路径并启用 64 位支持(如果 PHP 是 64 位):
./configure --with-scws=/usr/local/scws --with-php-config=/usr/local/php/bin/php-config
然后重新执行 make && make install。