Pages

Monday, 27 January 2020

Homebrew1.5以后,安装php扩展的方法

一、以前Mac安装php及php扩展的方式

用Mac的童鞋都知道,我们以前都是用brew install php70,brew install php71 这样来安装php的(用集成环境的除外),用brew install php70-xdebug,brew install php71-redis等这样来安装php某个版本对应的扩展的,而且这样的安装方式非常方便,每个扩展都单独使用一个配置文件,放在/usr/local/etc/php/7.1/conf.d 里面(其中7.1是版本,你电脑上有可能是其他版本).

二、第三方维护的php tap被移动到Homebrew/core

看,执行brew search php71就有提示,我以前用的这个tap:josegonzalez/php 被移动到homebrew/core了.
  • 移动的原因:
    homebrew在1.5版本更新时说明了将会在2018-03-31前弃用并且归档Homebrew/php这个tap,原因是Homebrew组织已经无法通过非核心公式tap的方式,去维护一个可被使用者或贡献者接受的一致性的体验及持续完整性的工作量!
  • 我的翻译可能比较鸡肋,自己看原文吧:
    https://brew.sh/2018/01/19/homebrew-1.5.0
    By 31st March 2018 we will deprecate and archive the Homebrew/php tap. Unfortunately we have been unable to maintain an acceptable, consistent user or contributor experience and CI workload through non-core formula taps in the Homebrew organisation so we are continuing to migrate widely used formulae into Homebrew/core and encourage more niche formulae and options to be supported outside the Homebrew organisation.
  • https://brew.sh/2018/04/09/homebrew-1.6.0
    We deprecated and archived the Homebrew/php tap and created new php and versioned php@* formulae in Homebrew/core. This completes the deprecation and archival of the last non-Homebrew/core tap for end-users. We encourage more niche formulae and options to be supported in taps outside the Homebrew organisation.
  • CI workload的CI是什么意思呢?
    请看:https://www.netapp.com/us/info/what-is-continuous-integration-continuous-delivery-cicd.aspx

三、现在要怎么安装php以及php扩展?

现在只能通过pecl或者源码编译方式安装,当然pecl本质上也是源码编译,只不过自动化了,不用我们自己找地方下载源码,解压,编译等。
注意:php7.3已经自带pecl了,我写这篇文章的时候,不知道是我没发现php自带pecl还是以前的版本本来就没有,返正你安装完php直接which pecl看看有没有,如果有,那就跳转下边的第一步安装pecl,直接看第二步使用pecl即可。

1.安装pecl

pecl是包含在pear项目中的,所以,要使用pecl命令,安装pear即可,它们的不同点,大概就是pear用来安装php写的库/包,而pecl用来安装C写的扩展。在https://pear.php.net/manual/en/installation.getting.php页面中找到以下内容:
就是先下载,再用php安装,用php安装原因是pear是一个phar包,也就是说它是用php写的:
curl -O https://pear.php.net/go-pear.phar
php -d detect_unicode=0 go-pear.phar
Shell
安装时,按上面图片上的步骤安装,或者像我这样直接填all,然后输入/usr/local,然后回车,再回车安装.
安装好pear就可以使用pecl了,安装好的pear其实并不是在指定的/usr/local中,虽然那里也有,但那只是一些缓存文件夹之类的(安装的时候那些选项就是说明),大部分文件夹都是空的。
实际安装到哪了,只要用which pear/which pecl查看一下即可知道,它是在/usr/local/bin中.
但实际上它们只是软链,实际文件是在php目录中(即与php同目录)

2.使用pecl安装扩展

比如我要安装amqp扩展:
pecl install amqp
Shell
但是这样安装还是报错(具体错误没记来下),后来我尝试重新安装php:brew install php,安装完后,再用pecl install amqp安装amqp扩展,这次成功了!brew services restart php重启php-fpm就可以在phpinfo里查到有这个扩展了!但我看了一下php.ini,发现果然像网上一个老外说的,It’s very stupid that the pecl put the extension reference to the top of the php.ini,就是说pecl安装完php的扩展后,确实是会自动住php.ini添加一行启用扩展的语句,即extension=xxxx.so这种,但是它是直接添加到php.ini顶部去了,因为我们都知道,这个语句应该放到php.ini中的这个区域:
;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
不过我还是不去移动它,因为所有插件都是这么装的,每个都移动一下太麻烦了,反正这样也能用!

3.现在怎么安装php?

现在直接用brew install php来安装php就可以,以前用brew install php71,brew install php@71这样的方式安装过的,也可以用brew install php再次安装,不会覆盖原来版本的,但是好像会提示要覆盖什么东西,我安装的时候没记录下来,大家自己根据提示操作吧。但是必须注意,这样安装的php都会是当前最新版本,其实你也没必要那么守旧,最新版本肯定是最好的。

四、总结

总之,现在Mac安装php扩展的方式不能用brew了,换成用pecl安装了
  • 1、你需要用brew install php重新安装php(放心,不会覆盖以前的版本)
  • 2、你需要安装pear(安装了pear就可以使用pecl install xdebug这样的方式安装php扩展了)