phpからredisを利用する
概要
phpよくわかってません。 phpインタプリタがリンクする共有ライブラリを確認したときに、peclでインストールしたredisの共有ライブラリがなかったので どうやってリンクしているんだろうと思ったときのメモ
phpからredisを使う
やはりredisが指定されていない。
$ ldd /usr/bin/php linux-vdso.so.1 => (0x00007ffe209cf000) libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fe868113000) libedit.so.0 => /usr/lib64/libedit.so.0 (0x00007fe867ee4000) libncurses.so.5 => /lib64/libncurses.so.5 (0x00007fe867cc1000) libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007fe8679bb000) libbz2.so.1 => /lib64/libbz2.so.1 (0x00007fe8677aa000) libz.so.1 => /lib64/libz.so.1 (0x00007fe867593000) librt.so.1 => /lib64/librt.so.1 (0x00007fe86738b000) libm.so.6 => /lib64/libm.so.6 (0x00007fe867107000) libdl.so.2 => /lib64/libdl.so.2 (0x00007fe866f02000) libnsl.so.1 => /lib64/libnsl.so.1 (0x00007fe866ce9000) libxml2.so.2 => /usr/lib64/libxml2.so.2 (0x00007fe866996000) libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007fe866751000) libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007fe86646a000) libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007fe86623e000) libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007fe866039000) libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007fe865dcc000) libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007fe8659e8000) libc.so.6 => /lib64/libc.so.6 (0x00007fe865653000) libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fe865439000) libfreebl3.so => /lib64/libfreebl3.so (0x00007fe865236000) libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007fe865014000) /lib64/ld-linux-x86-64.so.2 (0x00007fe868350000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fe864dfe000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fe864be1000) libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007fe8649d5000) libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007fe8647d2000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fe8645b2000)
peclでインストールされる場所
peclなどでインストールしたphpの共有ライブラリは、専用のディレクトリに配置され、 phpインタプリタは実行時にそこをみにいくようだ。
pecl config-show Configuration (channel pecl.php.net): PHP extension directory ext_dir /usr/lib64/php/modules
extension directoryが配置される場所。
redisがあるか
$ ll /usr/lib64/php/modules/ | grep redis -rwxr-xr-x. 1 root root 450624 Jun 9 15:06 redis.so
実行されているphpプロセスを確認
仮想メモリにロードされていることを確認。
cat /proc/9993/maps | grep redis 7f221e4f7000-7f221e560000 r-xp 00000000 fd:01 401352 /usr/lib64/php/modules/redis.so 7f221e560000-7f221e760000 ---p 00069000 fd:01 401352 /usr/lib64/php/modules/redis.so 7f221e760000-7f221e765000 rw-p 00069000 fd:01 401352 /usr/lib64/php/modules/redis.so
他にも/usr/lib64/php/modules/ないのモジュールがリンクされていることを確認。