MacでPHPのバージョンを切り替える方法|Homebrewの手順と反映されないときの対処
MacでPHPのバージョンを切り替えるには、Homebrewで目的のバージョンを入れたあと、いま有効なPHPをbrew unlinkで外し、使いたいバージョンをbrew link --overwrite --forceで貼り直します。インストールしただけではphp -vの表示は変わりません。
つまずくのはほぼこの1点です。brew install php@8.3まで実行して「バージョンが変わらない」と止まる場合、原因はインストールではなくリンクとPATHにあります。この記事では、インストールから切り替え、そして反映されないときの切り分け方までをまとめました。
▼この記事で使う環境
- Homebrew 6系(Apple Siliconのインストール先は
/opt/homebrew、Intel Macは/usr/local) - シェルはzsh(macOS Catalina以降の標準)
HomebrewでPHPをインストールする
まずは切り替え先のPHPを用意します。Homebrewは複数バージョンのPHPを同時に入れておけるので、使う可能性のあるものは先に入れておくと後が楽です。
Homebrewをインストールする
Homebrewが入っていなければ、公式のインストールコマンドを実行します。HomebrewはmacOSのパッケージマネージャで、PHPに限らず開発ツールの導入をコマンド1行で済ませられます。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
インストール後、brew -vでバージョンが表示されれば成功です。Homebrewの導入とターミナル周りの初期設定はMacのターミナルにbrewとVimを構築するにも書いています。
インストールできるPHPのバージョンを確認する
使えるバージョンはbrew searchで確認します。正規表現で囲うと、関連パッケージが混ざらずphp@系だけが並びます。
brew search '/^php(@[0-9.]+)?$/'
2026年9月時点でHomebrew本体(homebrew-core)から入れられるのは次の5つです。
▼homebrew-coreで提供されているPHP
| formula名 | 内容 |
|---|---|
php |
最新の安定版 |
php@8.4 |
8.4系 |
php@8.3 |
8.3系 |
php@8.2 |
8.2系 |
php@8.1 |
8.1系 |
サポートが終了したバージョンは順に削除されていきます。7系など、ここに無い古いバージョンが必要な場合は後述のタップを使います。
使いたいバージョンをインストールする
バージョンを指定してインストールします。
brew install php@8.3
最新版でよければbrew install phpだけで構いません。インストールが終わっても、この時点ではまだphp -vの結果は変わりません。次の手順が本題です。
PHPのバージョンを切り替える
切り替えはbrew unlinkで今のリンクを外し、brew linkで新しいバージョンを貼り直すという2段階で行います。
現在のバージョンを確認する
まず今どのPHPが動いているかを確認します。
php -v
unlinkしてからlinkし直す
ここが切り替えの中心です。いま有効になっているPHPを外してから、使いたいバージョンを強制的にリンクします。
# いま有効なPHPのリンクを外す
brew unlink php
# 使いたいバージョンをリンクする
brew link --overwrite --force php@8.3
php@8.1のようなバージョン付きのformulaはkeg-onlyといって、インストールしても自動ではパスが通りません。--forceが必要なのはこのためです。--overwriteは、既存のシンボリックリンクを上書きして貼り直すためのオプションです。
PATHを通してターミナルを再起動する
リンクだけで切り替わらない場合は、シェルの設定ファイルにPATHを書きます。zshなら~/.zshrcです。
export PATH="/opt/homebrew/opt/php@8.3/bin:$PATH"
export PATH="/opt/homebrew/opt/php@8.3/sbin:$PATH"
Intel Macの場合は/opt/homebrewではなく/usr/localに読み替えてください。書き換えたら設定を読み込み直します。
source ~/.zshrc
php -v
これで指定したバージョンが表示されれば切り替え完了です。.zshrcの編集やターミナルの設定そのものを整えたい場合はMacのターミナルをIcebergとPrezto(pure)で良い感じに設定するが参考になります。
php -v が変わらないときの原因は?
リンクし直したのに表示が変わらないときは、Homebrew以外のPHPがPATHの先頭にいるのがほとんどの原因です。順に切り分けます。
PATH上のphpをすべて洗い出す
which -a phpで、PATHに存在するphpが優先順に全部出ます。1行目に出たものが実行されているPHPです。
which -a php
type -a php
type -aのほうはエイリアスやシェル関数も拾うので、両方見るのが確実です。1行目が/opt/homebrew/bin/php以外になっていたら、そのパスがPATHの先に入っています。
よくある犯人は次の3つです。
- macOS標準や手動インストールの
/usr/local/php/bin - MAMPやXAMPPが追加したパス
- Apple Silicon機で
/usr/local/binが/opt/homebrew/binより前に来ている
~/.zshrcを開いて、Homebrewのパスがより後ろに書かれていないか確認してください。
古いシンボリックリンクが残っている
brew linkで「Target already exists」と出る場合は、古いシンボリックリンクが残っているので手動で消してから貼り直します。
ls -la /opt/homebrew/bin/php*
rm /opt/homebrew/bin/php
brew link --overwrite --force php@8.3
読み込まれているphp.iniを確認する
バージョンは切り替わったのに拡張機能の挙動が変わらない場合は、設定ファイルが前のバージョンのものを見ている可能性があります。
php -i | grep "Loaded Configuration"
表示されたパスが、切り替えたバージョンのディレクトリになっているかを確認します。php-fpmを使っている場合は、あわせてサービスも再起動します。
brew services restart php@8.3
homebrew-coreに無い古いバージョンを使いたいとき
PHP 7系など、Homebrew本体から消えたバージョンが必要なときはshivammathur/phpという外部タップを使います。PHP 5.6以降の各バージョンが揃っています。
brew tap shivammathur/php
brew install shivammathur/php/php@7.4
brew unlink php
brew link --overwrite --force shivammathur/php/php@7.4
サポートが終了したPHPは脆弱性が修正されません。古い案件の保守で必要な場合に限って使い、本番環境に持ち込まないようにしてください。
覚えるのは3つのコマンドだけ
切り替えで使うコマンドはbrew install・brew unlink・brew link --overwrite --forceの3つです。それでも変わらなければwhich -a phpでPATHを見る、という流れを覚えておけば、たいていの状況は自力で解決できます。
▼切り替えの手順まとめ
brew install php@8.3でインストールするbrew unlink phpで今のリンクを外すbrew link --overwrite --force php@8.3で貼り直すsource ~/.zshrcしてphp -vで確認する- 変わらなければ
which -a phpでPATHの先頭を調べる
PHPそのものの書き方についてはecho/console.logを使った文字列出力【PHP】も書いています。
▼HTML/CSS/JavaScriptの学習本を探している方はこちら