それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

brew で php のインストール(homebrew/php/喪失以降)とモジュール(xdebug)のインストール

phpbrew で入れようとしたら、エラー

Homebrew/php (deprecated)

です。

f:id:takuya_1st:20180513170025p:plain:w300

世の中の brew install で書かれた意識高いPHP'erのゴミ記事が役に立たなくなりました。

どうするのか?

php はtapから本家に戻りました。なので、以下の通りで十分です。

brew install php 
brew install php71

extensionどうするのか?

PECL 使います。

プレビルド版はなくなりました。php利用者層を考えるとバッドな感じはあるけど、仕方ないですね。

brew install php 
hash -r 
pecl install xdebug

beta 版の利用などは、suffix を付けて対応します。

pecl install gmagick # stable が無いのでエラー
pecl install gmagick-beta

pecl なんて懐かしいな。長いこと使ってないや。

pecl install は

php.ini を直接書き換えてしまうようなので注意が必要

pecl でいれた モジュールの有効化には、conf.d を使いたいのですが、なぜか php.iniを書き換えくれるので、

vim /usr/local/etc/php/7.2/php.ini # pecl が書き換えた extension を削除

extensionsを conf.d に記述

conf.d にモジュールのロード記述を描くといい。

/usr/local/etc/php/7.2/conf.d/ext-gmagick.ini
/usr/local/etc/php/7.2/conf.d/ext-xdebug.ini

brew で入れたphpの場合にエクステンションのパスを記述するとき、 バージョンの枝番(7.2.9 の場合 9 ) を入れてしまうと、頻繁なアップデートで最小バージョンが合わなくなってファイルの読み込みに苦労する。

そこで次のように記述する

[xdebug]
zend_extension="/usr/local/lib/php/pecl/20170718/xdebug.so"

よく無い記述の例

[gmagick]
zend_extension="/usr/local/Cellar/php/7.2.5/pecl/20170718/gmagick.so" # 7.2.5 → 7.2.6になるだけでエラー

好ましい書き方の例

こう書くのがベター

[gmagick]
zend_extension="/usr/local/lib/php/pecl/20170718/gmagick.so"

zend apiバージョンは半年くらい変わらないので brew upgrade で 7.2.7 → 7.2.8 とかにマイナーバージョンの更新があった時でも特に問題なく設定が維持される。

iniファイルの書き換えをやらないとエラー

このように、同じエラーが2回出てきているときは、extensionの記述が2回あるということです。

takuya@conf.d$ php =v
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/Cellar/php/7.2.5/pecl/20170718/gmagick.so' (tried: 
/usr/local/Cellar/php/7.2.5/pecl/20170718/gmagick.so (dlopen(/usr/local/Cellar/php/7.2.5/pecl/20170718/gmagick.so, 9): image not found), 
/usr/local/Cellar/php/7.2.9_1/lib/php/20170718//usr/local/Cellar/php/7.2.5/pecl/20170718/gmagick.so.so 
(dlopen(/usr/local/Cellar/php/7.2.9_1/lib/php/20170718//usr/local/Cellar/php/7.2.5/pecl/20170718/gmagick.so.so, 9): image not found))
in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library '/usr/local/Cellar/php/7.2.5/pecl/20170718/gmagick.so' (tried: 
/usr/local/Cellar/php/7.2.5/pecl/20170718/gmagick.so (dlopen(/usr/local/Cellar/php/7.2.5/pecl/20170718/gmagick.so, 9): image not found), 
/usr/local/Cellar/php/7.2.9_1/lib/php/20170718//usr/local/Cellar/php/7.2.5/pecl/20170718/gmagick.so.so 
(dlopen(/usr/local/Cellar/php/7.2.9_1/lib/php/20170718//usr/local/Cellar/php/7.2.5/pecl/20170718/gmagick.so.so, 9): image not found)) 
in Unknown on line 0

困る人は

phpenv の利用を考えたほうが良いのではないでしょうか。

参考資料

https://github.com/Homebrew/homebrew-php