当 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.

微信赞赏码

文章不错,我要帮站长分担建站费!
天使投赏人

发表评论

70 − = sixty seven