在macOS(Mac OS X)上安装PhpRedis

简而言之

因为我想在PHP中使用Redis,所以我决定尝试使用用C编写的PHP Redis库PhpRedis。
请注意,我假设PHP和Redis已经安装好了。

在Homebrew上有php56-redis之类的东西,但是不知道是我的Mac的问题还是我的问题,brew不能正常使用。可能是rootless的问题…尽管在MacPorts上也一样,但我已经将其关闭(虽然实际上这样做是不好的…)。虽然不太能在HomeBrew上正常使用,但在MacPorts上没有问题,所以还算不错。

由于MacPorts中也有一个名为php56-redis的选项,因此我认为通过这个选项进行安装应该没有任何问题。

这次是我喝醉了,没有确认过通过port list | grep redis的方式,就直接从GitHub上下载源代码然后编译了,是的……
而且这是在我喝醉时的记忆,所以可能对别人并不太有帮助,只是为了自己做个备忘录。

请下载

我要从GitHub下载ZIP文件。由于是在GitHub上,所以也可以用git clone下载。
我将下载的ZIP文件移动到浏览器/opt/local/src下,并使用unzip进行展开和操作。
顺便一提,只要在configure中指定了适当的目录来复制,无论在哪个目录进行构建,都不会有问题。我喝醉了,所以只是在/opt/local/src目录下进行了操作而已…

https://github.com/phpredis/phpredis 的地址

我建议你带来稳定的分支(例如3.0.0的Tag),虽然你喝醉了也带来了开发分支。如果你使用Mac的话,我更推荐HomeBrew或MacPorts。(Chinese language sentence generated by OpenAI GPT-3 model)

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

编译

我在MacPorts上安装了PHP5.6,它以名为php56的形式安装在/opt/local目录下,因此我为此指定了configure选项。

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

如果配置(configure)成功,那么将执行make、test和install。

# make && make test && make install

額外話:若在OS X上編譯失敗

如果遇到在OS X上构建失败的情况,请阅读GitHub的README.markdown,该文件建议您将以下内容添加到环境变量中,并尝试进行构建。

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的扩展进行安装。因此,安装目录根据系统而异。您可以通过以下方法确认extensions在您的系统中的安装位置(请注意,输出的目录可能会有所不同,请不要直接复制以下命令):

# php-config56 --extension-dir
/opt/local/lib/php56/extensions/no-debug-non-zts-20131226

如果在该目录下存在redis.so文件,就可以了。可以使用find或ls命令来确认是否已安装。

# 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

使用vi/vim等编辑器,在php.ini中使用扩展指示器指定路径,以便配置PHP5.6能够使用PhpRedis。如果还有其他扩展,可以在相同配置的末尾添加。

# 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 &

我将使用非常简单且随意的PHP示例代码来尝试。
我将使用Redis的基本功能,即字符串类型,将值“nganga”存储在键hoge中。随后,我会从键hoge中获取并显示值,这只是一个非常简单的操作验证。这是测试代码,所以没有包含任何错误处理。

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

我们来尝试执行这个。

> 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中

bannerAds