コントロールパネルからバージョンを設定してもコマンドラインには反映されない
エックスサーバーはコントロールパネルからPHPのバージョンを設定しても、コマンドラインでphp
とだけで実行すると5系で実行されてしまう。
例えば、コントロールパネルからはPHP7.4を指定してある状態だが、以下のようになる。
$ php -v
PHP 5.4.16 (cli) (built: Nov 1 2019 16:04:20)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
とりあえずの回避策
whereis php
を実行すると分かる通り、/usr/bin/
や /opt/
の中にPHPバージョンごとの実行ファイルが存在する。
そのため、以下のようにすれば任意のバージョンで実行できる。
$ /usr/bin/php7.4 -v
PHP 7.4.13 (cli) (built: Dec 6 2020 21:19:47) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
※ちなみに、/usr/bin/
のPHPは /opt/php-x.x.x/bin/php
へのシンボリックリンクである。
なので、Cron等でPHPをバッチ処理する場合などはこの方法で設定するケースをよく見かける。
めんどくさくない?
それ、シンボリックリンクと.bashrcで回避できるよ
エックスサーバーにcomposerを導入したことがある人はこの時点で解決策が見えているかもしれないが、つまりそういうこと。
手順1. 適当なディレクトリにシンボリックリンクを作成
今回は /home/ユーザー名/opt/bin/php というシンボリックリンクを作成する
$ mkdir ~/opt
$ mkdir ~/opt/bin
$ cd ~/opt/bin
$ ln -s /opt/php-7.4/bin/php php
手順2. .bashrcを編集
上記のパスを.bashrcに登録する
vi ~/.bashrc
以下を追記
export PATH=$HOME/opt/bin:$PATH
手順3. 再度SSHでログインし、バージョンを確認
$ php -v
PHP 7.4.13 (cli) (built: Dec 6 2020 21:19:47) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
以上。
上記の方法だと /opt/bin/
に入れたファイルがコマンドとして認識されるため、自前でインストールしたプログラム(composerなど)も登録することができる。