我正在尝试在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
文件
答案 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