PHPのバージョンを5.6にアップグレードする際に、peclライブラリのインストールで少しハマったのでメモ。これまでは、yumに頼り過ぎていたため、PHPもソースからコンパイルして入れなおしてみた。PHPをソースからコンパイルする手順は別途。
PHPのバージョンを5.6にアップグレードして、古いPHPを利用していた際にpecl install
で入れてPeclパッケージを読み込もうとすると上手くいかなかった。そもそも無理やり古いのを利用したのが良くないのだが、、、
PHP Warning: PHP Startup: http: Unable to initialize module
古いPHPのバージョンでコンパイルしたパッケージなので、バージョンが合わずにWarningが出ている模様。この問題を解決するために、今回はpecl_httpをソースからインストールし直した時の手順をまとめた。
pecl_http2.2.0に関しては、propro
とraphf
が依存しているため、事前に準備する必要がある。
依存パッケージの準備
各パッケージのソースから今回はする方法関しては、ドキュメントを参照。
今回は、特定のバージョンのPHPでコンパイルしたいため、--with-php-config
を利用。
propro.so
cd /usr/local/src/php-5.6.0/ext
wget -O propro-1.0.0.tgz http://pecl.php.net/get/propro-1.0.0.tgz
tar xvzf propro-1.0.0.tgz
cd propro-1.0.0
phpize
./configure --with-php-config=/your/path/php-5.6.0/bin/php-config
make
make install
cat << EOF > /your/path/propro.ini
extension= propro.so
EOF
raphf.so
cd /usr/local/src/php-5.6.0/ext
wget -O raphf-1.0.4.tgz http://pecl.php.net/get/raphf-1.0.4.tgz
tar xvzf raphf-1.0.4.tgz
cd raphf-1.0.4
phpize
./configure --with-php-config=/your/path/php-5.6.0/bin/php-config
make
make install
cat << EOF > /your/path/raphf.ini
extension=raphf.so
EOF
この後、pecl_http
をコンパイルする際に、propro.so
とraphf.so
が必要となるため、.ini
ファイルに記述しておく。
httpパッケージのインストール
http.so
cd /usr/local/src/php-5.6.0/ext
wget -O pecl_http-2.2.0.tgz http://pecl.php.net/get/
tar xvzf pecl_http-2.2.0.tgz
cd pecl_http-2.2.0
phpize
./configure --with-php-config=/your/path/php-5.6.0/bin/php-config
make
make install
cat << EOF > /your/path/http.ini
extension=http.so
EOF
この段階でパッケージが読み込まれているか確認したところ、下記のようなエラーが出てうまく読み込みまれない。
$ php -v
#output
PHP Warning: PHP Startup: Unable to load dynamic library
...
/http.so: undefined symbol: php_persistent_handle_abandon in Unknown on line 0
propro.so
とraphf.so
をそれぞれの.ini
ファイルで読み込もうとしていたのが良くなったようなので、結局以下のようにhttp.ini
にまとめた。
# http.ini
extension=propro.so
extension=raphf.so
extension=http.so
$ php -m
http
propro
raphf
これで上手く行った。PHPはあまり詳しくないのだが、.so
ファイルが読み込まれる順番が影響しているのだろうか。