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/ないのモジュールがリンクされていることを確認。