nanisore oishisou

Webエンジニアあるまさんのゆるふわ奮闘記。

Homebrew を updateしたら、php -vでdyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.61.dylibと言ってくる

タイトル長っw

個人的に使ってみたことのあったyarnなんですが、本案件で使おうよとなると
yarnというものがありましてから始まり、こういう面で嬉しいんですねと続き、
それをPMに承認してもらって、じゃあそれをメンバーに周知して、と
いろいろ根回しが必要で面倒なので、npmのままやってたんですね。

あと別にnpmでも困らないので、正直。

しかし、新しいプロジェクトでは使いたいなーと思っていた矢先に
「駅前に新しく出来たプロジェクトがあるんだけど、俺たちも一緒にyarnにしませんか?」と
コミュ強なPMからお誘いされたんで、そうしてあげることにしました。
ライブラリのインストール速くてラクラクだねー。
バージョンもロックされて安心だしー。
あと、別にこれ途中からyarnにしても何の問題もないなー。yarn addすればyarn.lockも勝手に出来るし。(←知らなかったw)
yarn最高やーん。布教しよw

で、これからが本題なんだけど、
先日High Sierraクリーンインストールした関係で
yarnをinstallしなくちゃならなかったのでhomebrew updateしてhomebrewでインストールしたわけです。

したら、nginxさんから"502 Bad Gateway"とか怒られるようになって、
なんでやろかーといろいろと探っていたところ、php がエラってることが分かりました。 PHPを複数バージョン入れてるからだと思うんだよね。。。

またこれかよ。もうphpenvみたいなの使ったほうがいいかも。

それを辛うじて修正できたので、ここで手順を晒しておきます。

ちょっとワーニングまで直せてないんだけど。
直したので後述するぜ。

PHPを復活させるまでのベル子の軌跡

homebrewのupdateを実施したところ、phpがエラーを吐くようになった。

具体的には以下のエラー。

[-] php -v
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.61.dylib
  Referenced from: /usr/local/bin/php
  Reason: image not found
[1]    2282 abort      php -v

同じことで困っている人を発見。

kimikimi714.hatenablog.com

phpの再インストールが必要と書いてあるが、参考のstackoverflowにはsymlink方式とbrew unlink libpng方式もあるので まずはそちらから試すほうをおすすめする。理由は後述。

この人が参照しているstackoverflowはこちら

stackoverflow.com

ということで私は思い切ってphpを再インストールしてみた。 再インストールはオススメしない。理由は後述。

brew reinstall php72

そして、php -vをすると

[~] php -v
PHP Warning:  PHP Startup: Unable to load dynamic library 'memcached.so' (tried: /usr/local/Cellar/php/7.2.6/pecl/20170718/memcached.so (dlopen(/usr/local/Cellar/php/7.2.6/pecl/20170718/memcached.so, 9): image not found), /usr/local/Cellar/php/7.2.6/pecl/20170718/memcached.so.so (dlopen(/usr/local/Cellar/php/7.2.6/pecl/20170718/memcached.so.so, 9): image not found)) in Unknown on line 0

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

Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /usr/local/Cellar/php/7.2.6/pecl/20170718/imagick.so (dlopen(/usr/local/Cellar/php/7.2.6/pecl/20170718/imagick.so, 9): image not found), /usr/local/Cellar/php/7.2.6/pecl/20170718/imagick.so.so (dlopen(/usr/local/Cellar/php/7.2.6/pecl/20170718/imagick.so.so, 9): image not found)) in Unknown on line 0
PHP 7.2.7 (cli) (built: Jun 22 2018 06:27:50) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.7, Copyright (c) 1999-2018, by Zend Technologies

いっぱいエラーが出た。

探してみると/usr/local/Cellar/php/7.2.6ではなく/usr/local/lib/php/pecl/20170718配下にある。

[~] sudo find / -name imagick.so
/usr/local/lib/php/pecl/20170718/imagick.so

php.iniを書き換える

vi /usr/local/etc/php/7.2/php.ini
extension_dir = "/usr/local/lib/php/pecl/20170718"
;extension_dir = "/usr/local/Cellar/php/7.2.6/pecl/20170718"

php -vしてみるとまだなんかエラーを吐いているが、一応phpは動くようになった。

[~] php -v
PHP Warning:  Version warning: Imagick was compiled against Image Magick version 1799 but version 1800 is loaded. Imagick will run but may behave surprisingly in Unknown on line 0

Warning: Version warning: Imagick was compiled against Image Magick version 1799 but version 1800 is loaded. Imagick will run but may behave surprisingly in Unknown on line 0
PHP 7.2.7 (cli) (built: Jun 22 2018 06:27:50) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.7, Copyright (c) 1999-2018, by Zend Technologies

※ 7/13追記

Imagickを入れ直す

[~] pecl uninstall imagick
[~] pecl install imagick

php -vをして以下のようなエラーが出たら、php.iniにモジュールロードが二重で書かれているので、
一行削除する。

[-] php -v
PHP Warning:  Module 'imagick' already loaded in Unknown on line 0

Warning: Module 'imagick' already loaded in Unknown on line 0
PHP 7.2.7 (cli) (built: Jun 22 2018 06:27:50) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.7, Copyright (c) 1999-2018, by Zend Technologies

phpの再起動を忘れずに。

sudo brew services restart php

こんな感じで直るは直るけど気持ち悪いワーニングが出るので、再インストールは最後の手段にしたほうが良さげ。
あとマイナーバージョンが変わってまうし。