LoginSignup
2
2

More than 3 years have passed since last update.

Homebrewでphp7.1インストール時のエラー解消法(7.3と共存したいとき)

Last updated at Posted at 2020-10-09

プロジェクトの環境構築にあたりphp7.1が必要ということで、
Homebrewにてphp7.3と共存環境構築した際のメモ。

いや本当に、ダウングレードって骨が折れる、と思い知ったので
(なるべくならアップデートだけをしていけると平和ですよね)、
同じことで心と時間を消耗する方が1人でも減るように記録を残します。

エラー内容が
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylib
の方向けの記事になります!

環境

  • macOS Catalina
  • php 7.3(デフォルト)
  • zsh

php@7.1を入れる

Homebrewインストール

Homebrewをインストールします。
(Homebrewインストールについてはたくさん記事あるので割愛します)

インストールができたら、念の為ドクターコマンドをかけると安心感あります。
ピカピカのmacであれば問題ないでしょう。
不要ファイルや問題がある場合は解決策を示してくれます。

% brew doctor

phpのパッケージを探す

% brew search php@7
==> Formulae
php@7.2                                 php@7.3                                 php@7.4

はい、出てきません。
サポート終わるので、生きてるリポジトリから消されております。
いなくなった@7.1を探しにいきます。

墓場(安眠)と接続する

deprecatedされたphp7.1はこちらにいます。

https://github.com/eXolnet/homebrew-deprecated

「Installation」に記載の通り、下記を実行します。

brew tap exolnet/homebrew-deprecated

すると、/usr/local/Homebrew/Library/Taps以下に、exolnetというディレクトリができます。
brew tapで、deprecatedリポジトリをクローンしてきているだけですので、もし「古いのはいらないぜ!」ってなった場合は、このフォルダをまるっと削除すれば墓場との接続は解除されます。

ではもう一度試してみましょう。

% brew search php@7
==> Formulae
brew-php-switcher                       php@7.2
exolnet/deprecated/php@5.6              php@7.3 
exolnet/deprecated/php@7.0              phplint
exolnet/deprecated/php@7.1              phpmd

出ました。インストールします。

% brew install exolnet/deprecated/php@7.1

インストールが終わると、ご丁寧にパスを通してね、との旨のアナウンスが出るので、従います。

If you need to have php@7.1 first in your PATH run:
  echo 'export PATH="/usr/local/opt/php@7.1/bin:$PATH"' >> ~/.zshrc
  echo 'export PATH="/usr/local/opt/php@7.1/sbin:$PATH"' >> ~/.zshrc

こちらを実行すると、/Users/{ユーザー名}/.zshrc

export PATH="/usr/local/opt/php@7.1/bin:$PATH"
export PATH="/usr/local/opt/php@7.1/sbin:$PATH"

と出力されて、 phpコマンドをたたいたときに、Homebrewのphp@7.1をむいてくれるようになります。

php7.1を動かす(せない)

さあ、では別のターミナルを開いて、いざ実行!

% php -v
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylib
  Referenced from: /usr/local/opt/php@7.1/bin/php
  Reason: image not found
zsh: abort      php -v

ん。
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylib
こちらでググったところ、「icu4c(というライブラリ)のv64がないよ」と言われて起動しません。
確認します。

% brew list --versions icu4c
icu4c 67.1

たしかにないです。はいっているのは67.1です。
先程のphp@7.1インストール時、このicu4cが必要なのでDLがはしってるんですが、
ログをよく見ると、同様のワーニングが出てこけいます。
そう、これまた最新のicu4cでは配布版が67になっちゃっているので、動きません・・!(涙)

[余談]下記、ダメだったやつ

パッケージアップデート説

brew reinstall [パッケージ名]でいけたよ!」
brew upgradeでいけたよ!」
⇒色々あるんですが、Homebrewはいれたてピカピカでしたのでボツ。

オプションつける説

brew reinstall --build-from-source php@7.1でいけたよ!」
⇒icu4c 64エラーで怒られた。ボツ。
https://github.com/eXolnet/homebrew-deprecated/issues/27#issuecomment-696179914

ロウ(生)データアクセス説

brew reinstall https://raw.githubusercontent.com/Homebrew/homebrew-core/a806a621ed3722fb580a58000fb274a2f2d86a6d/Formula/icu4c.rbで64.2おとせるよ!」
⇒生データは落とさないでと怒られた。ボツ。

Error: Calling Installation of XXX from a GitHub commit URL is disabled! Use 'brew extract XXX' to stable tap on GitHub instead. 

php7.1を動かす(くようにする)

おそらく私と同様の手順は試し尽くして、世界で同様に悩んでいる女性が見つけた答えが。
(Your 2days saves me 💐 と言いたい)

https://github.com/eXolnet/homebrew-deprecated/issues/27

なに、git使ってゴニョゴニョする・・だと・・?
さらに調べてみると、より詳しく手順を載せてくれている方が。

https://gist.github.com/sawant/6ea10e45de7d09e966a1dc6afea3bffb

時を戻そう。 ←

手順詳細

① ターミナルを新規で開く。
② Homebrewのgitディレクトリに移動する。

% cd $(brew --prefix)/Homebrew/Library/Taps/homebrew/homebrew-core/Formula

git logで、icu4c.rb関連のログを確認。わさわさと出てくるので、自分が戻りたいバージョンのコミットidを確認。

% git log --follow icu4c.rb

commit c179a064276d698d66953898ff9e02d6e0664b2a
Author: BrewTestBot <brew-test-bot@googlegroups.com>
Date:   Wed Aug 15 21:51:09 2018 +0000

    icu4c: update 62.1 bottle.

commit 2235a91cedb2038a7c721796b48e63836c792607
Author: ilovezfs <ilovezfs@icloud.com>
Date:   Tue Jul 24 09:44:31 2018 +0200

    icu4c: remove head spec (#30427)

④該当のコミットid時点のブランチから、新規チェックアウトして、ブランチを移動。
git checkout -b [お好きなブランチ名] [該当のコミットid]

% git checkout -b icu4c-64.2 6d9815xxxxxxxxxxxxxx

Switched to a new branch 'icu4c-64.2'

git branchで今いるブランチ確認できます。

% git branch
* icu4c-64.2
  master

⑤icu4c.rbを再インストール

% brew reinstall ./icu4c.rb

インストールが開始されます。問題なくいけたら、

⑥もともと開いていたターミナルの画面(あるいは新規ターミナル開く)で、icu4cのバージョンを確認

brew list --versions icu4c
icu4c 64.2

下がった🙌

ということで、新規ターミナルを開いて、php -v 実行すると。

% php -v
PHP 7.1.33 (cli) (built: Dec 19 2019 11:01:14) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies

動いた!🎉

※動かない方は、Homebrewのphpが動作してない可能性があるので、
brew services start php@7.1など実行してみてください。
使うのを止めたいときは、brew services stop php@7.1で止められます。
https://ocws.jp/blog/i-raised-my-macs-php-version-to-7-3/

最新の状態に戻る

もし一時的に下げたいということでしたら、7.1で行いたい作業が完了したら、7.3に戻したいですよね。
そのときの手順も念の為書いておきます。

①新規ターミナルを開く
②Homebrewのgitディレクトリへ移動、ブランチ確認

% cd $(brew --prefix)/Homebrew/Library/Taps/homebrew/homebrew-core/Formula

% git branch
* icu4c-64.2
  master

チェックアウトしたブランチ(過去)にいるはずなので、

③マスターに戻る、(そしてブランチ再確認)

% git checkout master

% git branch
  icu4c-64.2
* master

ブランチ確認すると、masterブランチに戻っています。
この状態で逆にicu4cが古くてphp7.3が動かないよ!とかなった場合は、

新規ターミナル開いて、

% brew reinstall ./icu4c.rb

ってしてあげれば最新のicu4cがインストールされます。

% brew list --versions icu4c
icu4c 67.1

おわりに

  • 私はめぐりめぐってHomebrewのインストールからやり直した民なので、どなたかの救いになればこれ幸い
  • ターミナルはバンバン新規で開くのがよろし
  • ありがとう世界の開発者たち(の知見)

以上です!

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2