全文検索(FTS)が SQLite3 でも行えるらしいということを知ったのですが、PHPに組み込まれている SQLite3 モジュールは、FTS機能が有効化されていないとのことなので、sqlite3 と pdo_sqlite モジュールの FTS機能を有効化するためにコンパイルしてみました。
また、pdo_sqlite の構築には不具合がありますので、それへの対策を含めて FTSを有効化する手順を紹介いたします (^^)
コンパイル環境の準備
先ずは、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 をやってみる
次にOSイメージに VAW を使うのですが、Windows を使用している方は、プロビジョニング前に一部修正作業も必要なので、下記記事内の Windowsユーザー用のエラー対策 を行い VAW を起動させて下さい
VAW(Vagrant Ansible WordPress) のMySQLデータベースにHeidiSQLで接続する
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 がお勧め!
この記事のように、簡単に指定した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
※既にコンパイル済みだと切り替えしか行われないので、その場合は下記手順で再コンパイル
- ルート権限に変更し phpenv uninstall 7.0.4 をアンインストール
- 通常権限に戻り /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 にコピーしてから実行させます
configure
先ほど作成した configure シェルプログラムに全文検索用のコンパイルオプションを指定して configure を実行します
このサイトに詳しい説明があるのですが、全て英語なのでコンパイル方法の部分を要約するとこんな内容です
FTS3とFTS4はSQLiteのコアのソースコードに含まれていますが、それらはデフォルトで有効になっていません。有効FTS機能でのSQLiteをビルドするには、コンパイル時にプリプロセッサマクロSQLITE_ENABLE_FTS3を定義します。
新しいアプリケーションはまた、強化されたクエリ構文を有効にするには、SQLITE_ENABLE_FTS3_PARENTHESISマクロを定義する必要があります。
通常、これはコンパイラのコマンドラインに次の二つのスイッチを追加することによって行われます。-DSQLITE_ENABLE_FTS3
-DSQLITE_ENABLE_FTS3_PARENTHESISFTS3を有効にするとも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 をアクセスしてみる
sqlite3.so, pdo_sqlite.so を動的な拡張モジュールとして組み込むことが出来ました。そんなに難しくないので興味ある方は組み込んで見て下さい
※ちなみに今回構築したのは PHP用の拡張モジュールなので、Cent OS の /usr/bin/sqlite3 とは別なので注意です
今日は、FTSに対応した pdo_sqlite の組み込み手順を紹介いたしました
SQLite を使った全文検索を試す環境が出来たのでいろいろ試してみたいと思います。少しわかったら、またそのへんの記事を書いて紹介したいと思います (^^)