【问题标题】:Enable sqlite3 FTS5 for PHP为 PHP 启用 sqlite3 FTS5
【发布时间】:2019-07-07 00:49:56
【问题描述】:

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

【问题讨论】:

    标签: php sqlite centos full-text-search


    【解决方案1】:

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

    所以完整的步骤如下所示:

    $ 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
    

    现在为 server 安装了最新的 SQLite,但没有为 PHP 安装,让我们为 PHP

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

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

    *注意:第一步中提到的链接适用于本回答时最新的sqlite-autoconf amalgamation。也许有一个更新的版本适合你。 check here

    【讨论】:

      猜你喜欢
      • 2010-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-29
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      相关资源
      最近更新 更多