centos 为PHP启用sqlite3 FTS5

6g8kf2rb  于 2022-11-08  发布在  PHP
关注(0)|答案(1)|浏览(206)

我尝试在CentOS上使用SQLite3FTS5(全文搜索)和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文件

nbysray5

nbysray51#

我发现我必须在最后一步之前生成头文件
因此完整的步骤如下所示:

$ 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-编辑php.ini中的sqlite3.extension_dir,使其指向相同的文件夹,如下所示

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检查SQLite版本,在PHP中使用phpinfo();检查SQLite版本

  • 注意:第一步中提到的链接是在回答这个问题时最新的sqlite-autoconf amalgamation。可能有更新的版本适合你。check here

相关问题