sqlite3, pdo_sqlite モジュールの全文検索(FTS)対応コンパイル手順

全文検索(FTS)が SQLite3 でも行えるらしいということを知ったのですが、PHPに組み込まれている SQLite3 モジュールは、FTS機能が有効化されていないとのことなので、sqlite3 と pdo_sqlite モジュールの FTS機能を有効化するためにコンパイルしてみました。

また、pdo_sqlite の構築には不具合がありますので、それへの対策を含めて FTSを有効化する手順を紹介いたします (^^)

コンパイル環境の準備

SQLite

先ずは、PHPをコンパイルするための環境の構築が必要です

構築した環境は Windowsの Vagrant で VAW を使っています

仮想マシン VAW

VAW(Vagrant Ansible WordPress) は、WordPress の 開発/テスト環境を構築する Ansible playbook です。Cent OS(64bit) を使い、Apache や Nginx サーバー、MySQL や Mariadb, percona データベース、 php バージョンの切り替え等を簡単に行えます。今回は、この環境を使って PHP7.0.4 用に sqlite3, pdo_sqlite モジュールのコンパイルを行います

Vagrant って何? という方は先ずは下記記事を読んでインストールを行って下さい

Vagrant 仮想マシン入門 Getting Started をやってみる
Vagrant 入門として Getting Started をやってみました。使用環境の構築と基本的な使い方を紹介していますので、これから使ってみようという方の参考にどうぞ (^^)…

次にOSイメージに VAW を使うのですが、Windows を使用している方は、プロビジョニング前に一部修正作業も必要なので、下記記事内の Windowsユーザー用のエラー対策 を行い VAW を起動させて下さい

VAW(Vagrant Ansible WordPress) のMySQLデータベースにHeidiSQLで接続する
HeidiSQLで VAW(Vagrant Ansible WordPress)のMySQLデータベースにSSHポートフォワード接続する手順を紹介します。 これでデータベース処理の確認やデバッグが格段に便利になります (^^)…

VAWには、PHPコンパイル環境が含まれていますのでこれだけで最初の準備はOKです (^^)

 

PHPのコンパイル

今回は PHP7.0.4 を使って作業していきます

デフォルトコンフィグレーションの変更

VAWでは、PHP拡張モジュールが静的に組み込まれているので、sqlite3, pdo_sqlite モジュールを動的な shared モジュールとしてコンパイル出来るように構築する必要があります

拡張モジュールを静的に組み込むか、動的に組み込むかは、PHPをコンパイルする時のコンフィグレーションファイルで指定されています。

VAWのデフォルトコンフィグレーションは下記ファイルです

/home/vagrant/.phpenv/plugins/php-build/share/php-build/default_configure_options

このコンフィグレーションファイルを直接修正しても良いのですが、今回は、WindowのVAWプロジェクト内の default_configure_options.j2 テンプレートファイルを修正して、プロビジョニング時に自動的に反映されるようにします

C:\HashiCorp\Project\vaw\roles\phpenv\templates\default_configure_options.j2

※VAWをインストールしたディレクトリによりパスは変わります

このテンプレートファイルに sqlite 関連モジュールを動的に組み込むように下記修正を行います

--with-sqlite3=shared
--with-pdo-sqlite=shared

修正が終わったら vagrant up します(既に動作中なら vagrant provisioning )

起動したら下記ファイルの設定が書き換わっていることを確認します
/home/vagrant/.phpenv/plugins/php-build/share/php-build/default_configure_options

コンパイル

VAWでは、PHPバージョンを切り替える時にまだコンパイルされていなければ自動的にコンパイルして切り替えられます

PHPバージョン切り替えについては、下記記事を参考にして下さい

WPのPHP7動作確認は VAWの PHPバージョン切替え phpenv.sh がお勧め!
Vagrant VAW (Cent OS) 環境で PHPバージョン切り替えがとっても簡単に行える phpenv.sh シェルプログラムの使い方を紹介します。これで WordPress の PHP7 での動作確認も簡単に行えます (^^)…

この記事のように、簡単に指定したPHPバージョンをコンパイルして切り替えることが出来ます

それでは vagrant ssh で接続してコマンドラインから下記コマンドで PHP7.0.4 に切り替えます

/vagrant/command/phpenv.sh 7.0.4

終了すると下記ディレクトリに sqlite3.so, pdo_sqlite.so モジュールが生成されているはずです

/home/vagrant/.phpenv/versions/7.0.4/lib/php/extensions/no-debug-non-zts-20151012

※既にコンパイル済みだと切り替えしか行われないので、その場合は下記手順で再コンパイル

  1. ルート権限に変更し  phpenv uninstall 7.0.4 をアンインストール
  2. 通常権限に戻り /vagrant/command/phpenv.sh 7.0.4 を実行
php.ini ファイルで拡張モジュールロード

生成した拡張モジュールはまだ組み込まれていませんので、下記の php.ini ファイルで extension をロードするように追記する必要があります

/home/vagrant/.phpenv/versions/7.0.4/etc/php.ini

php.ini の 900行辺りに下記を追記します

extension="/home/vagrant/.phpenv/versions/7.0.4/lib/php/extensions/no-debug-non-zts-20151012/pdo_sqlite.so"
extension="/home/vagrant/.phpenv/versions/7.0.4/lib/php/extensions/no-debug-non-zts-20151012/sqlite3.so"

sudo service httpd restart コマンドを入力して再スタート

ドキュメントルートに phpinfo.php 下記内容で作成

<? PHP phpinfo(); ?>

これでブラウザから phpinfo.php にアクセスして各種情報を確認しようとしたら、エラーで表示されません (>_<)

本来ならこれで sqlite3, pdo_sqlite モジュールが問題なく動的モジュールとして組み込まれているのを確認出来るはずなのですが、ググってみると pdo_sqlite の動的モジュール構築に不具合があり pdo_sqlite モジュールが壊れてしまっているようです

php –ri pdo_sqlite を実行してみると

PDO Driver for SQLite 3.x => enabled
php: symbol lookup error: /home/vagrant/.phpenv/versions/7.0.4/lib/php/extensions/no-debug-non-zts-20151012/pdo_sqlite.so: undefined symbol: sqlite3_libversion

このエラーでググってみると 2009 年頃からのバグで、PHP7 でもまだ対策されていないようです

Bug #48614 Loading “pdo_sqlite.so” fails: undefined symbol: sqlite3_libversion

このままでは、pdo_sqlite が使用できませんが、元々全文検索(FTS)対応に再コンパイルするつもりだったので、このまま sqlite3, pdo_sqlite モジュールを個別にコンパイルして入れ替えたいと思います

拡張モジュールのコンパイル

sqlite3 モジュール

sqlite3 と pdo_sqlite モジュールのコンパイルには順序があり、先に sqlite3 をコンパイルする必要があります

先ずは、sqlite3 を全文検索出来るようにコンパイルしてみます
Sqlite3 拡張モジュールのソースコードは下記ディレクトリにあるので移動します

cd  /tmp/php-build/source/7.0.4/ext/sqlite3
phpize

ここで phpize というシェルプログラムを使って configure スクリプトを作成します

phppize は、config.m4 という拡張モジュールの構築情報を使って Makefile を作成するための configure シェルプログラムファイルを作成します

UNIX 用のビルドシステム: config.m4

拡張モジュールの config.m4 ファイルは、 UNIX のビルドシステムに対して「その拡張モジュールがサポートしている configure オプション」「依存する外部ライブラリ」 「コンパイル対象となるソースファイル」などの情報を伝えるものです。

しかし、sqlite3 拡張モジュールのディレクトリには、config0.m4 というファイルしかありません。これは、このモジュールに依存している他のモジュールがある場合に先にコンパイルが必要なためにこのようになっているそうです

今回は手動でこのモジュールをコンパイルするので config0.m4 を config.m4 にコピーしてから実行させます

sqlite_phpize

configure

先ほど作成した configure シェルプログラムに全文検索用のコンパイルオプションを指定して configure を実行します

SQLite FTS3 and FTS4 Extensions

このサイトに詳しい説明があるのですが、全て英語なのでコンパイル方法の部分を要約するとこんな内容です

FTS3とFTS4はSQLiteのコアのソースコードに含まれていますが、それらはデフォルトで有効になっていません。有効FTS機能でのSQLiteをビルドするには、コンパイル時にプリプロセッサマクロSQLITE_ENABLE_FTS3を定義します。
新しいアプリケーションはまた、強化されたクエリ構文を有効にするには、SQLITE_ENABLE_FTS3_PARENTHESISマクロを定義する必要があります。
通常、これはコンパイラのコマンドラインに次の二つのスイッチを追加することによって行われます。

-DSQLITE_ENABLE_FTS3
-DSQLITE_ENABLE_FTS3_PARENTHESIS

FTS3を有効にするともFTS4を利用可能にすることに注意してください。
個別のSQLITE_ENABLE_FTS4のコンパイル時のオプションはありません。
SQLiteののビルドがFTS3とFTS4の両方をサポートするいずれか、またはそれはどちらをサポートしています。

autoconfベースのビルドシステム使用している場合、CPPFLAGS環境変数を設定し ‘configure’スクリプト実行する簡単な方法です。

たとえば、次のコマンドを実行します。

CPPFLAGS=”-DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS” ./configure <configure options>

 

ということなので、コマンドラインからこのコンパイラオプションを指定して configure スクリプトを実行して Makefile を生成してみます

[vagrant@vaw sqlite3]$ CPPFLAGS="-DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS" ./configure --with-sqlite3=shared

Makefile が生成されたので、中を見てみると CPPFLAGS にちゃんと -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS が設定されています (^^)

make

次は コマンドラインで make と入力して Makefile 条件に従ってコンパイルを行ってみます

実行ログはこんな感じ

[vagrant@vaw sqlite3]$ make
/bin/sh /tmp/php-build/source/7.0.4/ext/sqlite3/libtool --mode=compile cc -I/tmp/php-build/source/7.0.4/ext/sqlite3/libsqlite -DSQLITE_ENABLE_FTS3=1 -DSQLITE_CORE=1 -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_THREADSAFE=0  -I. -I/tmp/php-build/source/7.0.4/ext/sqlite3 -DPHP_ATOM_INC -I/tmp/php-build/source/7.0.4/ext/sqlite3/include -I/tmp/php-build/source/7.0.4/ext/sqlite3/main -I/tmp/php-build/source/7.0.4/ext/sqlite3 -I/home/vagrant/.phpenv/versions/7.0.4/include/php -I/home/vagrant/.phpenv/versions/7.0.4/include/php/main -I/home/vagrant/.phpenv/versions/7.0.4/include/php/TSRM -I/home/vagrant/.phpenv/versions/7.0.4/include/php/Zend -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext/date/lib  -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DHAVE_CONFIG_H  -g -O2   -c /tmp/php-build/source/7.0.4/ext/sqlite3/sqlite3.c -o sqlite3.lo
mkdir .libs
 cc -I/tmp/php-build/source/7.0.4/ext/sqlite3/libsqlite -DSQLITE_ENABLE_FTS3=1 -DSQLITE_CORE=1 -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_THREADSAFE=0 -I. -I/tmp/php-build/source/7.0.4/ext/sqlite3 -DPHP_ATOM_INC -I/tmp/php-build/source/7.0.4/ext/sqlite3/include -I/tmp/php-build/source/7.0.4/ext/sqlite3/main -I/tmp/php-build/source/7.0.4/ext/sqlite3 -I/home/vagrant/.phpenv/versions/7.0.4/include/php -I/home/vagrant/.phpenv/versions/7.0.4/include/php/main -I/home/vagrant/.phpenv/versions/7.0.4/include/php/TSRM -I/home/vagrant/.phpenv/versions/7.0.4/include/php/Zend -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext/date/lib -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DHAVE_CONFIG_H -g -O2 -c /tmp/php-build/source/7.0.4/ext/sqlite3/sqlite3.c  -fPIC -DPIC -o .libs/sqlite3.o
/bin/sh /tmp/php-build/source/7.0.4/ext/sqlite3/libtool --mode=compile cc -I/tmp/php-build/source/7.0.4/ext/sqlite3/libsqlite -DSQLITE_ENABLE_FTS3=1 -DSQLITE_CORE=1 -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_THREADSAFE=0  -I. -I/tmp/php-build/source/7.0.4/ext/sqlite3 -DPHP_ATOM_INC -I/tmp/php-build/source/7.0.4/ext/sqlite3/include -I/tmp/php-build/source/7.0.4/ext/sqlite3/main -I/tmp/php-build/source/7.0.4/ext/sqlite3 -I/home/vagrant/.phpenv/versions/7.0.4/include/php -I/home/vagrant/.phpenv/versions/7.0.4/include/php/main -I/home/vagrant/.phpenv/versions/7.0.4/include/php/TSRM -I/home/vagrant/.phpenv/versions/7.0.4/include/php/Zend -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext/date/lib  -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DHAVE_CONFIG_H  -g -O2   -c /tmp/php-build/source/7.0.4/ext/sqlite3/libsqlite/sqlite3.c -o libsqlite/sqlite3.lo
mkdir libsqlite/.libs
 cc -I/tmp/php-build/source/7.0.4/ext/sqlite3/libsqlite -DSQLITE_ENABLE_FTS3=1 -DSQLITE_CORE=1 -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_THREADSAFE=0 -I. -I/tmp/php-build/source/7.0.4/ext/sqlite3 -DPHP_ATOM_INC -I/tmp/php-build/source/7.0.4/ext/sqlite3/include -I/tmp/php-build/source/7.0.4/ext/sqlite3/main -I/tmp/php-build/source/7.0.4/ext/sqlite3 -I/home/vagrant/.phpenv/versions/7.0.4/include/php -I/home/vagrant/.phpenv/versions/7.0.4/include/php/main -I/home/vagrant/.phpenv/versions/7.0.4/include/php/TSRM -I/home/vagrant/.phpenv/versions/7.0.4/include/php/Zend -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext/date/lib -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DHAVE_CONFIG_H -g -O2 -c /tmp/php-build/source/7.0.4/ext/sqlite3/libsqlite/sqlite3.c  -fPIC -DPIC -o libsqlite/.libs/sqlite3.o
/bin/sh /tmp/php-build/source/7.0.4/ext/sqlite3/libtool --mode=link cc -DPHP_ATOM_INC -I/tmp/php-build/source/7.0.4/ext/sqlite3/include -I/tmp/php-build/source/7.0.4/ext/sqlite3/main -I/tmp/php-build/source/7.0.4/ext/sqlite3 -I/home/vagrant/.phpenv/versions/7.0.4/include/php -I/home/vagrant/.phpenv/versions/7.0.4/include/php/main -I/home/vagrant/.phpenv/versions/7.0.4/include/php/TSRM -I/home/vagrant/.phpenv/versions/7.0.4/include/php/Zend -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext/date/lib  -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DHAVE_CONFIG_H  -g -O2   -o sqlite3.la -export-dynamic -avoid-version -prefer-pic -module -rpath /tmp/php-build/source/7.0.4/ext/sqlite3/modules  sqlite3.lo libsqlite/sqlite3.lo
cc -shared  .libs/sqlite3.o libsqlite/.libs/sqlite3.o   -Wl,-soname -Wl,sqlite3.so -o .libs/sqlite3.so
creating sqlite3.la
(cd .libs && rm -f sqlite3.la && ln -s ../sqlite3.la sqlite3.la)
/bin/sh /tmp/php-build/source/7.0.4/ext/sqlite3/libtool --mode=install cp ./sqlite3.la /tmp/php-build/source/7.0.4/ext/sqlite3/modules
cp ./.libs/sqlite3.so /tmp/php-build/source/7.0.4/ext/sqlite3/modules/sqlite3.so
cp ./.libs/sqlite3.lai /tmp/php-build/source/7.0.4/ext/sqlite3/modules/sqlite3.la
PATH="$PATH:/sbin" ldconfig -n /tmp/php-build/source/7.0.4/ext/sqlite3/modules
----------------------------------------------------------------------
Libraries have been installed in:
   /tmp/php-build/source/7.0.4/ext/sqlite3/modules

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,--rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------

Build complete.
Don't forget to run 'make test'.

無事に sqlite3.so 拡張モジュールが /tmp/php-build/source/7.0.4/ext/sqlite3/modules 下に生成されました

make install

次は生成された sqlite3.so を php7.0.4 の拡張モジュールフォルダーに配置して使えるようにする必要があります。
make install と入力すると /home/vagrant/.phpenv/versions/7.0.4/lib/php/extensions/no-debug-non-zts-20151012 ディレクトリへコピーしてくれます

[vagrant@vaw sqlite3]$ make install
Installing shared extensions:     /home/vagrant/.phpenv/versions/7.0.4/lib/php/extensions/no-debug-non-zts-20151012/
Installing header files:           /home/vagrant/.phpenv/versions/7.0.4/include/php/

これで sqlite3 モジュールの構築は完了です (^^)

pdo_sqlite モジュール

次は、 pdo_sqlite モジュールです

これは SQLite を PDO というデータベースアクセスライブラリを使って操作するモジュールです

PDOは、様々なデータベースを同じインターフェースで扱えるようにするもので、データベースごとに異なるアクセス関数を使わなくても同じインターフェースで扱えるようにするものなので、PHPからのデータベースはPDOを使って操作することが推奨されています

それでは pdo_sqlite ディレクトリへ移り、同様に構築していきます

cd  /tmp/php-build/source/7.0.4/ext/pdo_sqlite
phpize

このモジュールは、config.m4 があるので、そのまま実行すれば Makefile を作成するための configure シェルプログラムファイルが作成されます

configure

次に下記コンパイルオプションを指定して configure を実行して Makefile を生成します

[vagrant@vaw pdo_sqlite]$ CPPFLAGS="-DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS" ./configure --with-pdo-sqlite=shared
make

次は make コマンドで Makefile 条件に従ってコンパイルを行ってみます

Make 実行でエラー発生です (>_<)

本来ならもっと大元の原因を対策すべきなのでしょうが、手っ取り早く
Makefile ファイルをエディターで開いて直接修正を行います

14行目 shared_objects_pdo_sqlite に sqlite3.lo を追加

shared_objects_pdo_sqlite = pdo_sqlite.lo sqlite_driver.lo sqlite_statement.lo ../sqlite3/libsqlite/sqlite3.lo

39行目 インクルードファイル sqlite3/libsqlite のパス指定がおかしいので修正

INCLUDES = -I/home/vagrant/.phpenv/versions/7.0.4/include/php -I/home/vagrant/.phpenv/versions/7.0.4/include/php/main -I/home/vagrant/.phpenv/versions/7.0.4/include/php/TSRM -I/home/vagrant/.phpenv/versions/7.0.4/include/php/Zend -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext/date/lib -I/tmp/php-build/source/7.0.4/ext/sqlite3/libsqlite

また、193,194行目 sqlite3.lo のコンパイルが pdo_sqlite ディレクトリ内のあることを前提に libsqlite/sqlite3.c を指しているが、実際には sqlite3 モジュールの ../sqlite3/libsqlite/sqlite3 を使用するのでここではコンパイルは行わず既に sqlite3 モジュールで生成済みの sqlite3.lo にリンクだけすればOKなはずなのでこのままとする

これで再度 make 実行

[vagrant@vaw pdo_sqlite]$ make
/bin/sh /tmp/php-build/source/7.0.4/ext/pdo_sqlite/libtool --mode=compile cc -DPDO_SQLITE_BUNDLED=1 -DSQLITE_ENABLE_FTS3=1 -DSQLITE_CORE=1 -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_THREADSAFE=0 -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext -I. -I/tmp/php-build/source/7.0.4/ext/pdo_sqlite -DPHP_ATOM_INC -I/tmp/php-build/source/7.0.4/ext/pdo_sqlite/include -I/tmp/php-build/source/7.0.4/ext/pdo_sqlite/main -I/tmp/php-build/source/7.0.4/ext/pdo_sqlite -I/home/vagrant/.phpenv/versions/7.0.4/include/php -I/home/vagrant/.phpenv/versions/7.0.4/include/php/main -I/home/vagrant/.phpenv/versions/7.0.4/include/php/TSRM -I/home/vagrant/.phpenv/versions/7.0.4/include/php/Zend -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext/date/lib -I/tmp/php-build/source/7.0.4/ext/sqlite3/libsqlite  -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DHAVE_CONFIG_H  -g -O2   -c /tmp/php-build/source/7.0.4/ext/pdo_sqlite/pdo_sqlite.c -o pdo_sqlite.lo
cc -DPDO_SQLITE_BUNDLED=1 -DSQLITE_ENABLE_FTS3=1 -DSQLITE_CORE=1 -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_THREADSAFE=0 -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext -I. -I/tmp/php-build/source/7.0.4/ext/pdo_sqlite -DPHP_ATOM_INC -I/tmp/php-build/source/7.0.4/ext/pdo_sqlite/include -I/tmp/php-build/source/7.0.4/ext/pdo_sqlite/main -I/tmp/php-build/source/7.0.4/ext/pdo_sqlite -I/home/vagrant/.phpenv/versions/7.0.4/include/php -I/home/vagrant/.phpenv/versions/7.0.4/include/php/main -I/home/vagrant/.phpenv/versions/7.0.4/include/php/TSRM -I/home/vagrant/.phpenv/versions/7.0.4/include/php/Zend -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext/date/lib -I/tmp/php-build/source/7.0.4/ext/sqlite3/libsqlite -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DHAVE_CONFIG_H -g -O2 -c /tmp/php-build/source/7.0.4/ext/pdo_sqlite/pdo_sqlite.c  -fPIC -DPIC -o .libs/pdo_sqlite.o
/bin/sh /tmp/php-build/source/7.0.4/ext/pdo_sqlite/libtool --mode=compile cc -DPDO_SQLITE_BUNDLED=1 -DSQLITE_ENABLE_FTS3=1 -DSQLITE_CORE=1 -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_THREADSAFE=0 -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext -I. -I/tmp/php-build/source/7.0.4/ext/pdo_sqlite -DPHP_ATOM_INC -I/tmp/php-build/source/7.0.4/ext/pdo_sqlite/include -I/tmp/php-build/source/7.0.4/ext/pdo_sqlite/main -I/tmp/php-build/source/7.0.4/ext/pdo_sqlite -I/home/vagrant/.phpenv/versions/7.0.4/include/php -I/home/vagrant/.phpenv/versions/7.0.4/include/php/main -I/home/vagrant/.phpenv/versions/7.0.4/include/php/TSRM -I/home/vagrant/.phpenv/versions/7.0.4/include/php/Zend -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext/date/lib -I/tmp/php-build/source/7.0.4/ext/sqlite3/libsqlite  -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DHAVE_CONFIG_H  -g -O2   -c /tmp/php-build/source/7.0.4/ext/pdo_sqlite/sqlite_driver.c -o sqlite_driver.lo
cc -DPDO_SQLITE_BUNDLED=1 -DSQLITE_ENABLE_FTS3=1 -DSQLITE_CORE=1 -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_THREADSAFE=0 -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext -I. -I/tmp/php-build/source/7.0.4/ext/pdo_sqlite -DPHP_ATOM_INC -I/tmp/php-build/source/7.0.4/ext/pdo_sqlite/include -I/tmp/php-build/source/7.0.4/ext/pdo_sqlite/main -I/tmp/php-build/source/7.0.4/ext/pdo_sqlite -I/home/vagrant/.phpenv/versions/7.0.4/include/php -I/home/vagrant/.phpenv/versions/7.0.4/include/php/main -I/home/vagrant/.phpenv/versions/7.0.4/include/php/TSRM -I/home/vagrant/.phpenv/versions/7.0.4/include/php/Zend -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext/date/lib -I/tmp/php-build/source/7.0.4/ext/sqlite3/libsqlite -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DHAVE_CONFIG_H -g -O2 -c /tmp/php-build/source/7.0.4/ext/pdo_sqlite/sqlite_driver.c  -fPIC -DPIC -o .libs/sqlite_driver.o
/bin/sh /tmp/php-build/source/7.0.4/ext/pdo_sqlite/libtool --mode=compile cc -DPDO_SQLITE_BUNDLED=1 -DSQLITE_ENABLE_FTS3=1 -DSQLITE_CORE=1 -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_THREADSAFE=0 -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext -I. -I/tmp/php-build/source/7.0.4/ext/pdo_sqlite -DPHP_ATOM_INC -I/tmp/php-build/source/7.0.4/ext/pdo_sqlite/include -I/tmp/php-build/source/7.0.4/ext/pdo_sqlite/main -I/tmp/php-build/source/7.0.4/ext/pdo_sqlite -I/home/vagrant/.phpenv/versions/7.0.4/include/php -I/home/vagrant/.phpenv/versions/7.0.4/include/php/main -I/home/vagrant/.phpenv/versions/7.0.4/include/php/TSRM -I/home/vagrant/.phpenv/versions/7.0.4/include/php/Zend -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext/date/lib -I/tmp/php-build/source/7.0.4/ext/sqlite3/libsqlite  -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DHAVE_CONFIG_H  -g -O2   -c /tmp/php-build/source/7.0.4/ext/pdo_sqlite/sqlite_statement.c -o sqlite_statement.lo
cc -DPDO_SQLITE_BUNDLED=1 -DSQLITE_ENABLE_FTS3=1 -DSQLITE_CORE=1 -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_THREADSAFE=0 -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext -I. -I/tmp/php-build/source/7.0.4/ext/pdo_sqlite -DPHP_ATOM_INC -I/tmp/php-build/source/7.0.4/ext/pdo_sqlite/include -I/tmp/php-build/source/7.0.4/ext/pdo_sqlite/main -I/tmp/php-build/source/7.0.4/ext/pdo_sqlite -I/home/vagrant/.phpenv/versions/7.0.4/include/php -I/home/vagrant/.phpenv/versions/7.0.4/include/php/main -I/home/vagrant/.phpenv/versions/7.0.4/include/php/TSRM -I/home/vagrant/.phpenv/versions/7.0.4/include/php/Zend -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext/date/lib -I/tmp/php-build/source/7.0.4/ext/sqlite3/libsqlite -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DHAVE_CONFIG_H -g -O2 -c /tmp/php-build/source/7.0.4/ext/pdo_sqlite/sqlite_statement.c  -fPIC -DPIC -o .libs/sqlite_statement.o
/bin/sh /tmp/php-build/source/7.0.4/ext/pdo_sqlite/libtool --mode=link cc -DPHP_ATOM_INC -I/tmp/php-build/source/7.0.4/ext/pdo_sqlite/include -I/tmp/php-build/source/7.0.4/ext/pdo_sqlite/main -I/tmp/php-build/source/7.0.4/ext/pdo_sqlite -I/home/vagrant/.phpenv/versions/7.0.4/include/php -I/home/vagrant/.phpenv/versions/7.0.4/include/php/main -I/home/vagrant/.phpenv/versions/7.0.4/include/php/TSRM -I/home/vagrant/.phpenv/versions/7.0.4/include/php/Zend -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext -I/home/vagrant/.phpenv/versions/7.0.4/include/php/ext/date/lib -I/tmp/php-build/source/7.0.4/ext/sqlite3/libsqlite  -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DHAVE_CONFIG_H  -g -O2   -o pdo_sqlite.la -export-dynamic -avoid-version -prefer-pic -module -rpath /tmp/php-build/source/7.0.4/ext/pdo_sqlite/modules  pdo_sqlite.lo sqlite_driver.lo sqlite_statement.lo ../sqlite3/libsqlite/sqlite3.lo -lrt
cc -shared  .libs/pdo_sqlite.o .libs/sqlite_driver.o .libs/sqlite_statement.o ../sqlite3/libsqlite/.libs/sqlite3.o  -lrt  -Wl,-soname -Wl,pdo_sqlite.so -o .libs/pdo_sqlite.so
creating pdo_sqlite.la
(cd .libs && rm -f pdo_sqlite.la && ln -s ../pdo_sqlite.la pdo_sqlite.la)
/bin/sh /tmp/php-build/source/7.0.4/ext/pdo_sqlite/libtool --mode=install cp ./pdo_sqlite.la /tmp/php-build/source/7.0.4/ext/pdo_sqlite/modules
cp ./.libs/pdo_sqlite.so /tmp/php-build/source/7.0.4/ext/pdo_sqlite/modules/pdo_sqlite.so
cp ./.libs/pdo_sqlite.lai /tmp/php-build/source/7.0.4/ext/pdo_sqlite/modules/pdo_sqlite.la
PATH="$PATH:/sbin" ldconfig -n /tmp/php-build/source/7.0.4/ext/pdo_sqlite/modules
----------------------------------------------------------------------
Libraries have been installed in:
/tmp/php-build/source/7.0.4/ext/pdo_sqlite/modules

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,--rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------

Build complete.
Don't forget to run 'make test'.

コンパイル出来たようです (^^)

make install

次は生成された pdo_sqlite.so を php7.0.4 の拡張モジュールフォルダーに配置します

make install で /home/vagrant/.phpenv/versions/7.0.4/lib/php/extensions/no-debug-non-zts-20151012 ディレクトリへコピーしてくれます

これで pdo_sqlite モジュールの構築完了です

動作確認

sudo service httpd restart コマンドを入力して再スタート

ブラウザで phpinfo.php をアクセスしてみる

phpinfo_pdo_sqlite

sqlite3.so, pdo_sqlite.so を動的な拡張モジュールとして組み込むことが出来ました。そんなに難しくないので興味ある方は組み込んで見て下さい

※ちなみに今回構築したのは PHP用の拡張モジュールなので、Cent OS の /usr/bin/sqlite3 とは別なので注意です

今日は、FTSに対応した pdo_sqlite の組み込み手順を紹介いたしました

 

SQLite を使った全文検索を試す環境が出来たのでいろいろ試してみたいと思います。少しわかったら、またそのへんの記事を書いて紹介したいと思います (^^)

 


まとめ記事紹介

search star user home refresh tag chevron-left chevron-right exclamation-triangle calendar comment folder thumb-tack navicon angle-double-up angle-double-down angle-up angle-down quote-left googleplus facebook instagram twitter rss