Parallels Desktop 20%OFFセール中Check!

Macで複数のPHPのバージョンを切り替える方法 brew link/unlink

PHPを切り替える方法

Macにインストールされた複数のバージョンのPHPを切り替えて使う方法を解説します。

環境
  • Mac mini (M1, 2020)
  • macOS Monterey
  • Homebrew 3.4.2
目次

PHPコマンドの切り替え

すでにHomebrewで複数のバージョンのPHPをインストール済みということで話を進めます。php@8.0 から php@7.4 に切り替えるには次のようにします。

% brew unlink php@8.0
Unlinking /opt/homebrew/Cellar/php/8.0.17... 24 symlinks removed.
% brew link php@7.4
Linking /opt/homebrew/Cellar/php@7.4/7.4.28_1... 25 symlinks created.

If you need to have this software first in your PATH instead consider running:
  echo 'export PATH="/opt/homebrew/opt/php@7.4/bin:$PATH"' >> ~/.zshrc
  echo 'export PATH="/opt/homebrew/opt/php@7.4/sbin:$PATH"' >> ~/.zshrc

php@8.0 を unlink し、 php@7.4 を link しました。これでコマンドラインで使うPHPの切り替えは完了しました。

PATHを通す方法が案内されていますが、無視して大丈夫です。HomebrewのインストールのときにPATHを通しているので。

何をしたのか

/opt/homebrew/bin の中を見ると次のようになっています。

% ls -l /opt/homebrew/bin
...
lrwxr-xr-x  1 user  admin    35  3 20 02:31 phar -> ../Cellar/php@7.4/7.4.28_1/bin/phar
lrwxr-xr-x  1 user  admin    40  3 20 02:31 phar.phar -> ../Cellar/php@7.4/7.4.28_1/bin/phar.phar
lrwxr-xr-x  1 user  admin    34  3 20 02:31 php -> ../Cellar/php@7.4/7.4.28_1/bin/php
lrwxr-xr-x  1 user  admin    38  3 20 02:31 php-cgi -> ../Cellar/php@7.4/7.4.28_1/bin/php-cgi
lrwxr-xr-x  1 user  admin    41  3 20 02:31 php-config -> ../Cellar/php@7.4/7.4.28_1/bin/php-config
lrwxr-xr-x  1 user  admin    37  3 20 02:31 phpdbg -> ../Cellar/php@7.4/7.4.28_1/bin/phpdbg
lrwxr-xr-x  1 user  admin    37  3 20 02:31 phpize -> ../Cellar/php@7.4/7.4.28_1/bin/phpize
...

/opt/homebrew/bin の中にはインストールされたソフトウェアの実体へのシンボリックリンクがあります。brew unlink でこのシンボリックリンクを削除し、 brew link でシンボリックリンクを張ります。

私たちは、このPATHの通った/opt/homebrew/bin のシンボリックリンクを介してコマンドを実行しています。なので、シンボリックリンクを張り直すことでバージョンの切り替えができるのです。わーすごい。

プログラミング学習、お疲れさまです

プログラミングの独学に行き詰まっていませんか?誰かに相談したい、もっと効率よく学びたいなら、プログラミングスクールを検討してみてください。

PHP-FPMの切り替え

PHP-FPM を使っている場合はこれも切り替えます。

上記PHPコマンドの切り替えで /opt/homebrew/sbin/php-fpm のリンク先も切り替えられています。あとは php-fpm デーモンを再起動するだけです。

% brew services restart php
Stopping `php`... (might take a while)
==> Successfully stopped `php` (label: homebrew.mxcl.php)
==> Successfully started `php` (label: homebrew.mxcl.php)

PHPモジュールの切り替え

ApacheモジュールのPHPを使用している場合は手動で切り替えなければなりません。Apache の設定ファイル httpd.conf を修正します。

% vi /opt/homebrew/etc/httpd/httpd.conf

変更前

LoadModule php_module /opt/homebrew/opt/php@8.0/lib/httpd/modules/libphp.so

変更後

#LoadModule php_module /opt/homebrew/opt/php@8.0/lib/httpd/modules/libphp.so
LoadModule php7_module /opt/homebrew/opt/php@7.4/lib/httpd/modules/libphp7.so

変更を反映させるために httpd を再起動します。

% apachectl restart
将来はもっとやりやすくなるかも

Apacheの設定ファイル修正はちょっと面倒ですよね。手作業になってしまう理由は2つあって、ひとつはHomebrewの指示通りに設定すると LoadModule は(シンボリックリンクではなく)モジュールファイルの実体を参照していること。もうひとつはPHP7とPHP8でモジュールファイルの名前が違うことです。

1つめの問題は実体ではなくシンボリックリンクを参照することで解決します。つまり、LoadModule php_module /opt/homebrew/lib/httpd/modules/libphp.so とすればいいんです。

また、PHP8からモジュールファイルの名前が libphp.so になったので、今後リリースされるPHPのモジュールはファイル名にバージョン番号が付かないのではないでしょうか。

PHP8以降のバージョン間の切り替えならば、Apacheの設定ファイルの修正は必要なくなりそうです。

でわでわ

プログラミング学習、お疲れさまです

プログラミングの独学に行き詰まっていませんか?誰かに相談したい、もっと効率よく学びたいなら、プログラミングスクールを検討してみてください。

PHPを切り替える方法

この記事が気に入ったら
いいね または フォローしてね!

シェアしてね

コメント

コメントする

目次