PHPBrew 初體驗

PHPBrew 是國內 PHP 大神 c9s 所開發的,目的類似 nvm、rvm 或 pyenv,都是在做對應語言的直譯器下載編譯與切換的工具。

過去一直都是使用 brew install php 來安裝單一的 PHP 直譯器,因為維護的產品還沒遇到不同 PHP 版本的問題。但最近有需求要在 7.x 與 8.0 互相切換,在使用 brew link 有些情境下會失效,非常煩人,現在要準備改用 PHPBrew 了。

首先把過去的 php 移除,然後再透過 brew 安裝,還算簡單:

brew uninstall php
brew install phpbrew

接著可以使用 known 指令來查有哪些版本:

❯ phpbrew known
Read local release list (last update: 2021-04-07 03:21:21 UTC).
You can run `phpbrew update` or `phpbrew known --update` to get a newer release list.
8.0: 8.0.3, 8.0.2, 8.0.1, 8.0.0 ...
7.4: 7.4.16, 7.4.15, 7.4.14, 7.4.13, 7.4.12, 7.4.11, 7.4.10, 7.4.9 ...
7.3: 7.3.27, 7.3.26, 7.3.25, 7.3.24, 7.3.23, 7.3.22, 7.3.21, 7.3.20 ...
7.2: 7.2.34, 7.2.33, 7.2.32, 7.2.31, 7.2.30, 7.2.29, 7.2.28, 7.2.27 ...
7.1: 7.1.33, 7.1.32, 7.1.31, 7.1.30, 7.1.29, 7.1.28, 7.1.27, 7.1.26 ...
7.0: 7.0.33, 7.0.32, 7.0.31, 7.0.30, 7.0.29 ...

安裝主要版本

接著來裝目前的主要版本,後面的 +default 指的是安裝預設的 extension,反正就先裝好來看看再說。

phpbrew install 8.0 +default
phpbrew install 7.4 +default
phpbrew install 7.3 +default

但立馬就報錯:

checking for BZip2 in default path... not found
configure: error: Please reinstall the BZip2 distribution

查過 issue,看來只是單純 bzip2 要重裝。後來還有看到 zlib 出錯,單純只是沒裝:

brew install bzip2
brew install zlib

但不知道為何會吃不到 zlib 的函式庫,所以得直接指定路徑:

# Fish
phpbrew install 7.4 +default -- --with-zlib-dir=(brew --prefix zlib)

另外會報一個 clang 的錯。

clang: error: linker command failed with exit code 1 (use -v to see invocation)

查過 issue,裡面提到要裝 libxml2,雖然錯誤訊息差很多,但做完確實是 work 的。

後面就沒看到其他問題了,只是因為是從原始碼開始編譯起,所以會有點久。

裝好之後會出現一段訊息:

To use the newly built PHP, try the line(s) below:

$ phpbrew use php-8.0.3

Or you can use switch command to switch your default php to php-8.0.3:

$ phpbrew switch php-8.0.3

上面 use 指的是在目前的 session 使用 8.0.3,下面 switch 則是設定預設的 PHP 版本。

若是要安裝其他 ext,過去是用 pecl,phpbrew 則是用 extension 指令來安裝。

phpbrew extension install mongodb

再來是安裝 composer,過去的文件有提到可以用 phpbrew app 安裝,但後來似乎被移除了,所以只能用土法練鋼安裝法:

curl -sS https://getcomposer.org/installer | php

切換起來還算順,只是指令不一樣,很不習慣而已。

安裝過時版本

這裡是只安裝 cli variants 試試:

phpbrew install 7.2 +cli
phpbrew install 7.1 +cli
phpbrew install 7.0 +cli