2020年04月16日
Tweet
CentOS7 + Software Collection でインストールした、apache 2.4 と php 7.3 を利用しています。
memcached サーバーが別にあるので、PHPからこの memcached を利用したいと思います。
ちなみに yum でインストールしようとすると、scl でインストールしたPHPとの依存関係が出てしまいうまくいきません。
また無理矢理インストールしても scl 側のPHPには作用しません。
scl 側では対応した memcache のモジュールは用意されていません。さあ困った。
---------------------------
※以下のコマンドではうまくいきません。
後日顕彰した結果をまた記事にしたいとおもいます。
---------------------------
# yum list |grep memcache |grep php
php-pecl-memcache.x86_64 3.0.8-4.el7 base
base パッケージに php 用の memcache がありました。
rpm をダウンロードします。
# yumdownloader php-pecl-memcache.x86_64
中身を取り出します。
# rpm2cpio php-pecl-memcache-3.0.8-4.el7.x86_64.rpm |cpio -id
カレントフォルダ内にファイルができてしまうので、フォルダ内で実行した方がいいように思います。
エクステンションを保存する場所を確認します。
# php -i |grep extension_dir
extension_dir => /opt/rh/rh-php73/root/usr/lib64/php/modules => /opt/rh/rh-php73/root/usr/lib64/php/modules
# 取り出したファイルをエクステンションの場所にコピー
cp -p /[rpmから取り出したフォルダ]/usr/lib64/php/modules/memcache.so /opt/rh/rh-php73/root/usr/lib64/php/modules/
#php -i |grep ini
<略>
Scan this dir for additional .ini files => /etc/opt/rh/rh-php73/php.d
<略>
# cp -p /[rpmから取り出したフォルダ]/etc/php.d/memcache.ini /etc/opt/rh/rh-php73/php.d/memcache.ini
extension で memcache が指定されていることを確認する
httpd を 再起動する
# systemctl restart httpd24-httpd.service
エラーログが以下の通り出ていました。
PHP Warning: PHP Startup: Unable to load dynamic library 'memcache' (tried: /opt/rh/rh-php73/root/usr/lib64/php/modules/memcache (/opt/rh/rh-php73/root/usr/lib64/php/modules/memcache: cannot open shared object file: No such file or directory), /opt/rh/rh-php73/root/usr/lib64/php/modules/memcache.so (/opt/rh/rh-php73/root/usr/lib64/php/modules/memcache.so: undefined symbol: _zval_ptr_dtor)) in Unknown on line 0
と、ここまで書いてて、解決策が見つけられていません。
remi パッケージなどから memcache をダウンロードして、同じようにインストールすればうまくいくような気がしています。
_zval_ptr_dtorというのは、環境を確認した結果、対応していない場合に出ることが多いようです。
base パッケージの memcache は対応しているPHPのバージョンが古いのだと思われます。
参考
Why does the PHP extension fail to load with _zval_ptr_dtor_wrapper error
※結局 apache ごと remiパッケージを利用することにしてしまいました。

memcached サーバーが別にあるので、PHPからこの memcached を利用したいと思います。
ちなみに yum でインストールしようとすると、scl でインストールしたPHPとの依存関係が出てしまいうまくいきません。
また無理矢理インストールしても scl 側のPHPには作用しません。
scl 側では対応した memcache のモジュールは用意されていません。さあ困った。
---------------------------
※以下のコマンドではうまくいきません。
後日顕彰した結果をまた記事にしたいとおもいます。
---------------------------
# yum list |grep memcache |grep php
php-pecl-memcache.x86_64 3.0.8-4.el7 base
base パッケージに php 用の memcache がありました。
rpm をダウンロードします。
# yumdownloader php-pecl-memcache.x86_64
中身を取り出します。
# rpm2cpio php-pecl-memcache-3.0.8-4.el7.x86_64.rpm |cpio -id
カレントフォルダ内にファイルができてしまうので、フォルダ内で実行した方がいいように思います。
エクステンションを保存する場所を確認します。
# php -i |grep extension_dir
extension_dir => /opt/rh/rh-php73/root/usr/lib64/php/modules => /opt/rh/rh-php73/root/usr/lib64/php/modules
# 取り出したファイルをエクステンションの場所にコピー
cp -p /[rpmから取り出したフォルダ]/usr/lib64/php/modules/memcache.so /opt/rh/rh-php73/root/usr/lib64/php/modules/
#php -i |grep ini
<略>
Scan this dir for additional .ini files => /etc/opt/rh/rh-php73/php.d
<略>
# cp -p /[rpmから取り出したフォルダ]/etc/php.d/memcache.ini /etc/opt/rh/rh-php73/php.d/memcache.ini
extension で memcache が指定されていることを確認する
httpd を 再起動する
# systemctl restart httpd24-httpd.service
エラーログが以下の通り出ていました。
PHP Warning: PHP Startup: Unable to load dynamic library 'memcache' (tried: /opt/rh/rh-php73/root/usr/lib64/php/modules/memcache (/opt/rh/rh-php73/root/usr/lib64/php/modules/memcache: cannot open shared object file: No such file or directory), /opt/rh/rh-php73/root/usr/lib64/php/modules/memcache.so (/opt/rh/rh-php73/root/usr/lib64/php/modules/memcache.so: undefined symbol: _zval_ptr_dtor)) in Unknown on line 0
と、ここまで書いてて、解決策が見つけられていません。
remi パッケージなどから memcache をダウンロードして、同じようにインストールすればうまくいくような気がしています。
_zval_ptr_dtorというのは、環境を確認した結果、対応していない場合に出ることが多いようです。
base パッケージの memcache は対応しているPHPのバージョンが古いのだと思われます。
参考
Why does the PHP extension fail to load with _zval_ptr_dtor_wrapper error
※結局 apache ごと remiパッケージを利用することにしてしまいました。
stock_value at 17:16│Comments(0)│技術