为PHP启用sqlite3 FTS5

时间:2019-07-07 00:49:56

标签: php sqlite centos full-text-search

我正在尝试在CentOS上将SQLite3 FTS5 (全文搜索)与 PHP 一起使用。。但是,经过这么长时间的尝试,我无法成功获得它

我正在为SQlite构建可加载的FTS5扩展,并尝试了以下步骤(来自docs

在服务器终端(SSH)中:

$ yum install libsqlite3x-devel
$ wget -c http://www.sqlite.org/src/tarball/SQLite-trunk.tgz?uuid=trunk -O SQLite-trunk.tgz
$ tar -xzf SQLite-trunk.tgz
$ cd SQLite-trunk
$ ./configure && make fts5.c
$ gcc -g -fPIC -shared fts5.c -o fts5.so

但是我在最后一步中遇到以下错误:

fts5_index.c:732:11: error: ‘SQLITE_PREPARE_PERSISTENT’ undeclared (first use in this function)
fts5_index.c:732:37: error: ‘SQLITE_PREPARE_NO_VTAB’ undeclared (first use in this function)
fts5_main.c:888:29: error: ‘SQLITE_PREPARE_PERSISTENT’ undeclared (first use in this function)
fts5_main.c:1029:31: error: ‘SQLITE_PREPARE_PERSISTENT’ undeclared (first use in this function)
fts5_storage.c:139:15: error: ‘SQLITE_PREPARE_PERSISTENT’ undeclared (first use in this function)
fts5_storage.c:140:41: error: ‘SQLITE_PREPARE_NO_VTAB’ undeclared (first use in this function)

fts5.so文件未生成,因此我无法在服务器中使用它

那么您是否知道如何解决此错误并成功产生fts5.so文件

1 个答案:

答案 0 :(得分:0)

我发现我必须在最后一步之前生成头文件

因此完整步骤如下:

$ yum install libsqlite3x-devel
$ wget -c http://www.sqlite.org/src/tarball/SQLite-trunk.tgz?uuid=trunk -O SQLite-trunk.tgz
$ tar -xzf SQLite-trunk.tgz
$ cd SQLite-trunk
$ ./configure
$ make fts5.c sqlite3.h sqlite3ext.h
$ gcc -g -fPIC -shared fts5.c -o fts5.so

然后我必须加载fts5.so作为sqlite的可扩展扩展名

1-将fts5.so文件复制到服务器/sqlite_ext上的新文件夹

$ mkdir /sqlite_ext
$ cp fts5.so /sqlite_ext

2-在sqlite3.extension_dir中编辑php.ini指向与此相同的文件夹

sqlite3.extension_dir = "/sqlite_ext"

3-然后在我的php文件中,加载扩展名:

$db->loadExtension('fts5.so');

更新:

最好使用--enable-fts5选项更新服务器的SQLite整体

$ wget -c https://www.sqlite.org/2019/sqlite-autoconf-3280000.tar.gz
$ tar -xzf sqlite-autoconf-3280000.tar.gz
$ cd sqlite-autoconf-3280000
$ ./configure --enable-fts5 --prefix=/usr --disable-static CFLAGS="-g -O2 -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_ENABLE_UNLOCK_NOTIFY=1 -DSQLITE_SECURE_DELETE=1 -DSQLITE_SOUNDEX"
$ make
$ make install

现在为服务器安装了最新的SQLite,但没有为PHP安装,我们为 PHP

安装
$ mv aclocal.m4 config.m4
$ phpize

使用$ sqlite3 --version在服务器中以及使用phpinfo();在PHP中检查SQLite版本

*注意:第一步中提到的链接是针对此答案时最新的sqlite-autoconf amalgamation。也许有一个更新的版本适合您。 check here

enter image description here