Включить sqlite3 FTS5 для PHP - PullRequest
0 голосов
/ 07 июля 2019

Я пытаюсь использовать SQLite3 FTS5 (полнотекстовый поиск) с PHP в CentOS ... но я не смог получить его успешно после стольких попыток.

Я создаю загружаемое расширение FTS5 для SQlite и пробовал следующие шаги (из документы )

в серверном терминале (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 голосов
/ 07 июля 2019

Я обнаружил, что мне нужно сгенерировать заголовочные файлы перед последним шагом

, поэтому полные шаги выглядят так:

$ 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');

Обновление:

Лучше обновить SQLite серверав целом с опцией --enable-fts5

$ 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

Проверьте версию SQLite на сервере, используя $ sqlite3 --version, и в PHP, используя phpinfo();

* уведомление: ссылка, упомянутая в первом шаге, предназначена для самой последней sqlite-autoconf amalgamation ввремя этого ответа.там может быть более свежая версия для вас. отметьте здесь

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...