电脑是
13寸
17年时候的macbook
,系统升级了N个版本,最近尝试在本地安装redis
环境供php
开发。
安装redis
环境,除了安装redis
本身还需要安装redis
扩展phpredis
与Composer
依赖库predis
。
一、安装redis
1、通过brew
直接安装redis
brew install redis
brew services start redis
2、启动redis
服务
// 启动
brew services start redis
// 关闭
brew services stop redis
// 重启
brew services restart redis
3、连接redis
redis-cli
二、安装redis
扩展phpredis
1、下载源
git clone https://github.com/phpredis/phpredis.git
// 我这边找对应版本拉的zip
https://github.com/phpredis/phpredis
2、移动进入目录
mv phpredis /usr/local/Cellar
cd /usr/local/Cellar/phpredis
3、执行检测生成相应的configure
文件
phpize
4、开始编译
// 由于本机安装了多个版本php,需要 --with-php-config=*
./configure --with-php-config=/usr/local/Cellar/php@7.2/7.2.34_10/bin/php-config
make && make install
// 查看php-config路径
which php-config
5、修改php.ini
,开启扩展
// 我本机php.ini路径
vim /usr/local/etc/php/7.2/php.ini
// 添加extension
extension=redis.so
6、重启php
环境,使其生效
brew services restart php@7.2
7、检测扩展安装是否正常
// 输出打印能看到redis信息代表安装正确
<?php
phpinfo();
?>
8、为何windows
环境php.ini
配置extension=redis
即可,但macbook
环境就需要extension=redis.so
?
在
Windows
和Mac
环境下,PHP
扩展的加载方式有所不同。在Windows
环境下,PHP
使用动态链接库(DLL)
文件来加载扩展,因此只需要在php.ini
文件中添加extension=redis
即可。
而在Mac
环境下,PHP
使用共享对象(.so)
文件来加载扩展。因此,需要在php.ini
文件中添加extension=redis.so
来加载Redis
扩展。
这种差异是由于不同操作系统对动态链接库的命名约定不同。在
Windows
上,动态链接库的扩展名为.dll
,而在类Unix
系统(如Mac
)上,动态链接库的扩展名为.so
。
因此,在Mac
环境下,需要使用与操作系统匹配的扩展名(即.so
)来加载Redis
扩展。这样做可以确保PHP
正确加载并使用Redis
扩展的功能。
三、安装Composer
依赖库predis
1、进入项目目录,安装依赖库predis
composer require predis/predis
2、laravel
使用redis
// config => app.php配置aliases
'Redis' => Illuminate\Support\Facades\Redis::class
// .env配置redis配置参数
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
// 使用redis
Redis::hSet(CACHE_FOR_DATA, $cacheKey, $stringData);
四、安装过程中遇到的问题
1、遇到报错,php.ini
开启扩展失败
PHP Startup: Unable to load dynamic library 'redis' (tried: /usr/local/lib/php/pecl/20170718/redis (dlopen(/usr/local/lib/php/pecl/20170718/redis, 0x0009): tried: '/usr/local/lib/php/pecl/20170718/redis' (no such file)), /usr/local/lib/php/pecl/20170718/redis.so (dlopen(/usr/local/lib/php/pecl/20170718/redis.so, 0x0009): tried: '/usr/local/lib/php/pecl/20170718/redis.so' (no such file))) in Unknown on line 0
// 参考类似错误
PHP Warning: PHP Startup: Unable to load dynamic library 'redis.so' (tried: /usr/lib64/php/modules/redis.so (/usr/lib64/php/modules/redis.so: .....................
2、分析问题
寻找问题过程中很坑,搜出来大多都是不符合场景的,经过多次搜索仔细核对发现以下几个原因:
其中,php.ini
存在扩展目录配置extension_dir=/usr/local/lib/php/pecl/20170718
- 原因1:实际扩展目录
/usr/local/lib/php/pecl/20170718
没有,(这里很奇怪,之前一直都是这么配的也没报错,暂时没找到原因)
- 原因2:扩展目录
extension_dir
下没有'redis.so'
3、处理问题
(1)修改extension_dir
vim /usr/local/etc/php/7.2/php.ini
extension_dir = "/usr/local/lib/php/20170718"
(2)复制redis.so
到扩展目录
这边也有一个坑,网上说
phpredis
编译之后的目录下有redis.so
,但实际上是在其下级目录modules
下,当时找了好久,还是理解的不够深。
// 复制phpredis编译之后的redis.so到扩展文件夹
cd /usr/local/Cellar/phpredis/modules
cp redis.so /usr/local/lib/php/20170718
4、其他问题:Mac
系统which php
和phpinfo()
输出的php
版本信息不一致
我这边也是在核对各个细节信息时发现的,竟然在
iTerm
输出的php
版本信息跟我开发软件使用的不一致。
惊呆了,用了这么久也是没问题,之前安装了好几个版本php
,装了又卸载,卸载了又装,估计是当时两个版本正好一致。
(1)修改~/.zshrc
,我这边系统使用的是zsh
vim ~/.zshrc
// 追加替换PATH,原先7.2版本的注释
PATH=/usr/local/Cellar/php@7.2/7.2.34/bin
PATH=/usr/local/Cellar/php@7.2/7.2.34/sbin
// 执行生效
source ~/.zshrc
// 检验
which php
参考资料
https://www.cnblogs.com/dragon88/p/11880699.html
https://www.cnblogs.com/benbenhan/articles/13839065.html
网友评论