概要
Apache Solr
をPHPから操作するSolr Extensionを導入します。
Apache Solr
自体の導入は解説しません。
Solr Extensionの使い方も解説しません。1
環境
- CentOS7 64bit
- PHP5.4
必要ライブラリのyum install
通常はpecl install
のときにエラーとしてインストールを促されます。
不要なものをインストールしたくない方はpecl install
を先に試して、エラーメッセージの指示に従うのもOKです。
yum install libcurl-devel
yum install libxml2-devel
ない場合はlibcurl
を再インストールしてね、と言う風に読めるエラーがでますが、インストールするのは*-devel
です。
ビルドするときに必要なのでしょうが、ぺちぱーの中にはビルドの概念が薄い方もいらっしゃるのではないでしょうか。私のことです。
Solr Extension インストール
pecl install solr
を実行する。
入力はデフォルトのままでよい。
[root@localhost ~]# pecl install solr
WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update
downloading solr-2.4.0.tgz ...
Starting to download solr-2.4.0.tgz (256,316 bytes)
.....................................................done: 256,316 bytes
64 source files, building
running: phpize
Configuring for:
PHP Api Version: 20100412
Zend Module Api No: 20100525
Zend Extension Api No: 220100525
Enable Solr Debugging (Compiles solr in debug mode) [no] :
libcURL install prefix [/usr] :
libxml2 install prefix [/usr] :
(中略)
configure: error: Please reinstall the libcurl distribution -
easy.h should be in <curl-dir>/include/curl/
ERROR: `/var/tmp/solr/configure --with-php-config=/usr/bin/php-config --enable-solr-debug=no --with-curl=/usr --with-libxml-dir=/usr' failed
Solr Extension 有効化
インストールしただけではまだ使えず、PHPに読み込ませなくてはいけない。
php.ini
に書くべきものは、Extensionを探すパス(include Path)と、Extensionファイルの名前だが、Extensionファイルの作成先がすでにパス指定されているので、パスの指定は追加しなくてもよい。
[root@localhost ~]# php -i | grep 'extension'
This extension makes use of Bstrlib available at http://bstrlib.sf.net
extension_dir => /usr/lib64/php/modules => /usr/lib64/php/modules
[root@localhost ~]# ll /usr/lib64/php/modules/solr.so
-rw-r--r-- 1 root root 1302950 Aug 2 17:34 /usr/lib64/php/modules/solr.so
ファイル名を記述するだけで良いのだが、php.ini
に書かずとも、/etc/php.d/
に書かれたものも読み込まれるので、綺麗にできる。
むしろExtensionは/etc/php.d/
に書かれているので、Solrもここに書く。
echo 'extension=solr.so' > /etc/php.d/solr.ini
これで有効化が完了した
[root@localhost ~]# php -i | grep 'Solr'
Solr Support => enabled
Apacheなどは再読み込みが必要。
systemctl restart httpd.service
-
むしろ誰か解説してくださいお願いします。 ↩