PHP が起動できないのだが ?

突然、PHP を実行すると、次のようなエラーが出るようになりました。

エラー 1 Crypto

1dyld: Library not loaded: /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib
2  Referenced from: /Users/[UserName]/.phpbrew/php/php-7.3.4/bin/php
3  Reason: image not found
4found Abort trap: 6

エラー 2 Readline

1dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib
2  Referenced from: /Users/[UserName]/.phpbrew/php/php-7.3.4/bin/php
3  Reason: image not found
4Abort trap: 6

なお、私は PHPBrew を使っているため、 PHPBrew のパスになっています。

PHPBrew でかんたんに PHP 環境を管理する
MacにPHPBrewを導入してPHPの切り替えができるようにしてみました。
Atuweb 開発 Log

原因は Homebrew を操作したこと

直前にやったことは、「 Homebrew でライブラリを更新」でした。

具体的には OpenSSH の最新にしたのですが、これによって

  • 新しいバージョンが追加されて
  • 古いバージョンが削除された

結果、パスが変わってしまいライブラリを辿ることができなくなったようです。

対処したこと

今回 PHPBrew 変更せず、「辿れなくなったライブラリのパスを合わせる」ことで対処しました。

Crypto

見つからなくなった libcrypto.1.0.0.dylib は、どうやら OpenSSL 1.0.2 に含まれるようだ、ということがわかりました。

そのため、 そのバージョンに切り替えることとしました。

1$ brew switch openssl 1.0.2s

Readline

Readline については、バージョンを調べる前に力尽きて、次サイトさまを見て、今回はシンボリックリンクを入れることで対処しました。

俺的備忘録 〜なんかいろいろ〜
MacOSで「dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib」なるエラーが出るようになる
https://orebibou.com/2019/01/macos%E3%81%A7%E3%80%8Cdyld-library-not-loaded-usr-local-opt-readline-lib-libreadline-7-dylib%E3%80%8D%E3%81%AA%E3%82%8B%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E5%87%BA%E3%82%8B%E3%82%88%E3%81%86/

上記サイトで紹介されていた通りのコマンドでシンボリックリンクを設置することで、今回は回避することができました。

コマンドを引用すると次です。

1$ ln -s /usr/local/opt/readline/lib/libreadline.dylib /usr/local/opt/readline/lib/libreadline.7.dylib
2$ ln -s /usr/local/opt/readline/lib/libhistory.dylib /usr/local/opt/readline/lib/libhistory.7.dylib

いつも思いますが、環境系はハマると大変ですね。