phpを brew で入れようとしたら、エラー
Homebrew/php (deprecated)
です。
世の中の 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 の利用を考えたほうが良いのではないでしょうか。