自称Webアプリ屋、他称インフラ屋のサカベです。

前回に引き続き、Redisについて記してみたいと思います。
今回は、PHPからRedisを扱えるようにするまでを記します。

※既にRedisが動く状態であることを前提とします。
まだそういう状態でなければ、前回の記事を参考にRedis環境を構築しておきましょう。

前提の環境

  • CentOS7.3
  • Apache2.4.6
  • PHP7.1

環境は前回と同様になっています。

phpredisのセットアップ

PHPからRedisを扱うにあたり、PHPの拡張モジュールを使用するととても楽に扱えます。
いくつかあるようですが、今回は「phpredis」を使ってみたいと思います。
https://github.com/phpredis/phpredis

1. ソースの入手

phpredisのインストール方法はいくつかあるようですが、今回は公式のGitHub(URLは上記)でも紹介されている、ソースを自前でコンパイルする方法でやってみたいと思います。

※1 PECL Installが使えるならば、PECLからインストールするのもアリです。未検証ですが。。
※2 私は普段PHPのインストールをWebtatic Yum Repositoryから行っているのですが、ここで提供しているPHP7.1はPECLの拡張モジュールまで提供していないようです。なので、このコンパイル方式を取っています。

兎にも角にも、まずはGitが無いと始まらないので、まずはgitをインストールします。
また、コンパイルするにあたり、Cのコンパイラ(gcc)とmakeコマンドがインストールされていないといけないので、入っていなければそれもインストールしちゃいましょう。

# yum -y install git gcc make

Gitをインストールしたら、phpredisのソースをCloneしてきます。
ホームディレクトリか何かで行うのが良いでしょう。

# git clone https://github.com/phpredis/phpredis.git

2. コンパイル前の下準備

落としてきたソースを元にコンパイルを行うわけなのですが、その前にもう一準備あります。
PHPの拡張モジュールを追加する際には、phpizeというコマンドを使用します。
このphpizeを使用するには、PHPのパッケージの中にphp-develが入っていないといけません。

[root@localhost ~]# phpize
Can't find PHP headers in /usr/include/php
The php-devel package is required for use of this command.

rpmパッケージの一覧をgrepで絞り込みつつ確認すれば、php-develがインストール済みかどうか確認出来ます。
入っていれば、下記のようにヒットするはずです。

[root@localhost ~]# rpm -qa | grep php | grep devel
php71w-devel-7.1.3-1.w7.x86_64

ヒットしなかった場合はインストールしましょう。
下記はPHPのインストールにWebtatic Yum Repositoryを用いている場合です。
環境に合わせて適宜変更してください。

# yum -y install php71w-devel

実行後は、再びrpm -qa | grep php | grep develでちゃんとインストールされたかどうか確認しておきましょう。

3. phpredisのコンパイル&インストール

phpizeが使えるようになったらようやくコンパイルタイムです。
Cloneしてきたphpredisディレクトリの中で作業します。

# cd phpredis

ここからの手順は公式GitHubに則りましょう。
まずはphpizeします。

[root@localhost phpredis]# phpize
Configuring for:
PHP Api Version:         20160303
Zend Module Api No:      20160303
Zend Extension Api No:   320160303

続いて、./configureします。
./configure: ソースファイルのコンパイル前に、インストール対象のシステムの情報をチェックし、コンパイルするために必要なMakefileを作成するコマンド。
※繰り返しますが、この段階でgccmakeがインストールされてないとコンパイラがねえぞ、とエラーになりますので注意。

[root@localhost phpredis]# ./configure
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for a sed that does not truncate output... /bin/sed
~~ 中略 ~~
configure: creating ./config.status
config.status: creating config.h
config.status: executing libtool commands

最後に、makeしてコンパイルを実行すると共に、make installでインストールまでやっちゃいます。
make: configureコマンドで生成されたMakefileを元に、ソースファイルをコンパイルするコマンド。

[root@localhost phpredis]# make && make install
/bin/sh /root/phpredis/libtool --mode=compile cc  -I. -I/root/phpredis -DPHP_ATOM_INC -I/root/phpredis/include -I/root/phpredis/main -I/root/phpredis -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib  -DHAVE_CONFIG_H  -g -O2   -c /root/phpredis/redis.c -o redis.lo
~~ 中略 ~~
Build complete.
Don't forget to run 'make test'.

Installing shared extensions:     /usr/lib64/php/modules/

コンパイルとインストールはここまでで終わりですが、このままではまだ使えません。
いくつか設定しましょう。

4. phpredisの設定

この状態では、PHPはphpredisを読み込んでくれていません。

[root@localhost phpredis]# php -m | grep redis
[root@localhost phpredis]#

何も出なーい

ということで、拡張モジュールの設定ファイル群が置いてある/etc/php.d/に、Redis用の設定ファイルを作って置きましょう。
(設定ファイルまでは作ってくれてないのです。。)

# vi /etc/php.d/redis.ini

中身は1行書くだけで終わりです。

extension=redis.so

書いたら保存しちゃいましょう。

再度、読み込んでくれたか確認します。

[root@localhost phpredis]# php -m | grep redis
redis

今度は大丈夫そうですね。
実際に使う時は、systemctl restart httpd.serviceなどで、サーバーを一度再起動しておきましょう。

さて、コンパイルしてインストールするだけで思いの外文量が多くなってしまったので、phpredisを使ってアレコレするの巻は後日。。

Shere
  • はてなブログ
  • Twitter
  • Facebook
Redisを使ってみるその2: PHPからRedisを扱えるようにする(準備編)

Writer

  • Name

    サカベ ケンイチ

  • Position

    横浜と大洗を往復する自称Webアプリ屋。

  • Profile

    必要あればサーバー構築からバックエンド、ちょっぴりフロントまで担当するWebアプリ屋。 本業はPHPエンジニア。 アプリも手を出そうとC#+Xamarin勉強中。 そして必要あれば曲も作る。なお出番は無い模様。