1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

macOS(Mac OS X)にPhpRedisをインストール

Last updated at Posted at 2016-12-03

概要

PHPでRedis使いたかったので、Cで書かれたPHP用RedisライブラリPhpRedisを使ってみることにしました。
なお、PHPやRedisはインストール済みであるという前提で書いています。

Homebrewにphp56-redisとかありますが、なんだか私のMacの問題なのか私自体の問題なのかbrewがうまく使えません。rootlessの問題なのか…ってそれはMacPortsでも同じだったから切ってあるのですが(本当はよろしくないのですがね…)、MacPortsは問題なく使えているのに、HomeBrewはうまく使えません。
まあ、MacPortsで困らないからいいんですけれど…。

MacPortsにもphp56-redisというのがあるので、これでインストールすれば何の問題もなくインストールはできると思います。

今回は、私が酔っ払っててport list | grep redisで確認もせずにGitHubからソースを持ってきてコンパイルしただけです、はい…。
そして酔っ払ったときのメモなので、あまり役に立たない気もしますが、自分用にメモしておきます。

ダウンロード

GithubからZIPファイルをダウンロードします。GitHubなのでgit cloneでもいいかと思います。
ブラウザでダウンロードしたZIPファイル/opt/local/srcの下に移動し、unzipで展開して作業をしました。
ちなみにビルド自体はどのディレクトリで行っても、make install時に適切なディレクトリにコピーするようにconfigureで指定していれば問題はないでしょう。酔っ払っていたので、なぜか/opt/local/srcディレクトリを作って作業したにすぎません…。

https://github.com/phpredis/phpredis

これまた酔っ払ってdevelopブランチを持ってきていますが、ちゃんとstableブランチ(3.0.0のTagなど)を持ってくることをお勧めします(というかMacならHomeBrewかMacPortsのほうがお勧めなんですけどね…)。

PhpRedisの展開
> sudo su - root
# cd /usr/local/src
# mv ~/Downloads/phpredis-develop.zip .
# unzip phpredis-develop.zip
# cd phpredis-develop

コンパイル

PHP5.6をMacPortsで入れていると、/opt/local配下にphp56という名前でインストールされるので、これ用にconfigureのオプションを指定しました。

configureの実行
# ./configure --prefix=/opt/local --exec-prefix=/opt/local --with-php-config=/opt/local/bin/php-config56

configureが無事に通ったら、makeとtestとinstallを行います。

makeとtestとinstall
# make && make test && make install

余談:OS Xでビルドが失敗する場合

GitHubのREADME.markdownを読むとわかるのですが、OS Xでビルドする場合でfailしてしまう場合は、以下を環境変数に追加してビルドを試みるよう推奨されています。

fail時のビルドオプションを環境変数に設定する
MACOSX_DEPLOYMENT_TARGET=10.6
CFLAGS="-arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp"
CCFLAGS="-arch i386 -arch x86_64 -g -Os -pipe"
CXXFLAGS="-arch i386 -arch x86_64 -g -Os -pipe"
LDFLAGS="-arch i386 -arch x86_64 -bind_at_load"
export CFLAGS CXXFLAGS LDFLAGS CCFLAGS MACOSX_DEPLOYMENT_TARGET

PHPの設定

php.iniにextensionsを指定して、PhpRedisライブラリが使用できるようにします。インストール先はmake installで出力されたインストール先を確認する必要があります。
PhpRedisはPHPのextensionとしてインストールされます。そのため、インストール先のディレクトリはシステムによって異なる場合があります。自分のシステムでextensionsがどこにインストールされているのかは、次のように確認すればよいでしょう(出力されるディレクトリが異なるので、これをコピペしないように注意してください)。

php.iniの設定
# php-config56 --extension-dir
/opt/local/lib/php56/extensions/no-debug-non-zts-20131226

このディレクトリにredis.soファイルがあればOKです。findでもlsでもいいので、インストールされていることを確認しておきましょう。

findもしくはlsでredis.soの存在を確認
# find `php-config56 --extension-dir` -name redis.so
/opt/local/lib/php56/extensions/no-debug-non-zts-20131226/redis.so

もしくは

# ls -la `php-config56 --extension-dir`/redis.so
-rwxr-xr-x  1 root  admin  809800  8 15 12:48 /opt/local/lib/php56/extensions/no-debug-non-zts-20131226/redis.so

php.iniには、上記で確認したパスをextensions指定子を用いて、PHP5.6がPhpRedisを利用できるように設定します。vi/vimなどのエディタを使って編集してください。extensionsが他にもあれば、同じ並びの末尾に書き添えてあげればいいでしょう。

php.iniに設定したextensionsの例
# cat /opt/local/etc/php56/php.ini | grep redis
extension=/opt/local/lib/php56/extensions/no-debug-non-zts-20131226/redis.so

サンプルコードでの動作確認

設定がおわったら、実際にPHPからRedisが利用できるかどうかの確認を行います。テストの前にredis-serverを起動しておいてください

redis-serverの起動
# redis-server &

じつに簡単、かつテキトーなPHPのサンプルコードで試してみます。
Redisの基本である文字列型を使って、キーhogeに値ngangaを入れます。その直後に、キーhogeの値をSETから取得して表示するという、ごく簡単な動作確認です。テストコードなのでエラー処理とかはまったく入れていません。

test.php
<?php
$r = new Redis();
$r->connect('localhost', 6379);
$r->set('hoge', 'nganga');
echo $r->get('hoge')."\n";

これを、実行してみましょう。

test.phpの実行
> php56 test.php
nganga

さて、実際にRedisにデータが入っているのでしょうか。
別の手段で確認します。redis-cliで確認すればよいでしょう。

> redis-cli
127.0.0.1:6379> get hoge
nganga

あたりまえですが、同じ結果が表示されました。

余談:PHPセッションを保存する場合の設定

PhpRedisでは、PHPセッションをRedisに保存する仕組みも提供されています。詳しくは、以下の記事をご参考ください。どのパッケージシステムから(あるいはソースから)PhpRedisをインストールしても、PhpRedisが利用可能な状態であれば、設定そのものはOSや環境に大きく依存することはありません。

参考: PHPセッションをPhpRedisに保存する

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?