当 PECL 无法正常连接扩展包服务器时应该如何安装 PHP 扩展?

当 PECL 无法正常连接扩展包服务器时应该如何安装 PHP 扩展?

Chris Yue No Comment
Posts

2018-05-24 补充:原标题为『现在还能用 PECL 安装 PHP Redis 扩展吗?』,但也就隔了一天,pecl/redis 又出现在了 pecl list-all 列表里,所以后来将标题改了,但依然保留原文,算拿 phpredis 做例子吧。

2018-05-26 再补充:话说 PECL 是在逗我们呢,又是只隔了一天,证书又有问题,所有跟 ssh://pecl.php.net 的链接都失败(通过给 PECL 命令添加 -vvv 参数可获取详细线索)

以前习惯了 apt 或者 Homebrew 直接使用包管理工具安装 PHP Redis 扩展,不过后来 Homebrew 有了重大更新,所有的 PHP 公式都默认不提供了。不过这么做也不是没道理,既然你 PHP 已经有了安装扩展的工具 PECL,干嘛我 Homebrew 还要多此一举再给你提供扩展的公式呢?

不过我最近发现,使用 PECL 居然无法直接安装 Redis 扩展了,pecl install redis 命令会直接报错,说找不到 redis 扩展信息:

No releases available for package “pecl.php.net/redis”

一般遇到这种情况,都需要以下步骤来确认:

我用 brew 安装的是 php@7.2,自动安装了 PECL 1.10.5,但 pecl list-all 居然没有包含 pecl/redis 的信息。而且更奇怪的是,明明 PECL 官网是有 PHP Redis 的页面的啊,而且显示支持的 PHP 版本为『<=7.99.9』。

好在通过网上的一番挖掘操作,pecl 命令居然是可以直接安装本地文件的,我们可以直接去 https://pecl.php.net/package/redis 下载 redis 的代码包,比如目前(2018-05-23)最新的 redis-4.0.2.tgz,然后依然通过 pecl 的 install 命令就可以安装完成:

注意的是,pecl 编译并安装完扩展之后,会自动更改你当前加载的 php.ini 文件——在开头处添加 extension=redis.so,不过路径有可能是错的,至少在我的 Mac 上是这样……这个时候你需要复制 pecl 安装 redis 扩展时告诉你的安装路径,一般在 install 命令执行的最后会出现,然后将正确的完全路径赋值给 extension

另外加载方式也有可能有问题。如果你安装的是 xdebug,PECL 依然会无脑在 php.ini 文件里添加 extension=xdebug.so,然而 xdebug 是通过指定 zend_extension 来添加的。

最后运行命令 php -m|grep redis 确认 redis 已经被正常加载,就大功告成了。

PS. 翻墙小能手告诉大家如何用代理使用 pecl,还记得之前告诉大家 composer 如何使用代理,其实一回事儿:

当 PECL 无法正常连接扩展包服务器时应该如何安装 PHP 扩展? by Chris Yue is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

微信赞赏码

文章可赞,扫码赏饭!
天使投赏人

发表评论

+ 2 = 4