エックスサーバーにSSHでログイン後にコマンド操作する際やcronで予め用意したプログラムを実行する際などコマンド実行時(CLI)に最新のPHPを利用出来るようにする方法を書いて行きます。
デフォルトのPHPバージョン確認
SSHでログイン後に「php -v」 でデフォルトで設定されているPHPのバージョンを確認します。
$ php -v PHP 5.4.16 (cli) (built: Apr 1 2020 04:07:17) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies with Zend OPcache v7.0.5, Copyright (c) 1999-2015, by Zend Technologies
そろそろ PHP7系をデフォルトにしてくれてもいいような気もしますが、エックスサーバー(※ビジネスも同様)では PHP 5.4.16 がデフォルトに設定されているようでした。
利用可能なPHPバージョンを確認
“whereis” や “find” コマンドで利用可能なPHPのバージョンを確認します。
whereisコマンド
$ whereis php php: /usr/bin/php /usr/bin/php5.6-cgi /usr/bin/php5.1 /usr/bin/php5.3 /usr/bin/php5.4 /usr/bin/php5.5 /usr/bin/php7.0-cgi /usr/bin/php7.1 /usr/bin/php7.1-cgi /usr/bin/php7.2-cgi /usr/bin/php7.3 /usr/bin/php7.4-cgi /usr/bin/php5.6 /usr/bin/php7.0 /usr/bin/php7.2 /usr/bin/php7.3-cgi /usr/bin/php7.4 /usr/lib64/php /usr/share/php /opt/php-5.4.40/bin/php /opt/php-5.4.45/bin/php /opt/php-5.5.24/bin/php /opt/php-5.6.15/bin/php /opt/php-5.6.18/bin/php /opt/php-5.6.8/bin/php /opt/php-7.0.0/bin/php /opt/php-7.0.3/bin/php /opt/php-5.6.22/bin/php /opt/php-7.0.7/bin/php /opt/php-5.6.24/bin/php /opt/php-7.0.9/bin/php /opt/php-5.5.38/bin/php /opt/php-5.4.16/bin/php /opt/php-5.3.3/bin/php /opt/php-5.1.6/bin/php /opt/php-5.6.30/bin/php /opt/php-7.0.16/bin/php /opt/php-7.1.2/bin/php /opt/php-7.0.17/bin/php /opt/php-7.1.3/bin/php /opt/php-7.0.18/bin/php /opt/php-7.1.4/bin/php /opt/php-7.2.1/bin/php /opt/php-5.6.36/bin/php /opt/php-7.0.30/bin/php /opt/php-7.1.18/bin/php /opt/php-7.2.6/bin/php /opt/php-7.2.14/bin/php /opt/php-5.6.40/bin/php /opt/php-7.0.33/bin/php /opt/php-7.1.27/bin/php /opt/php-7.2.16/bin/php /opt/php-7.1.28/bin/php /opt/php-7.2.17/bin/php /opt/php-7.3.4/bin/php /opt/php-7.2.20/bin/php /opt/php-7.3.8/bin/php /opt/php-7.1.33/bin/php /opt/php-7.2.27/bin/php /opt/php-7.3.14/bin/php /opt/php-7.4.2/bin/php /opt/php-7.4.3/bin/php /opt/php-5.6.40-webp/bin/php /opt/php-7.0.33-webp/bin/php /opt/php-7.1.33-webp/bin/php /opt/php-7.2.29/bin/php /opt/php-7.3.16/bin/php /opt/php-7.4.4/bin/php /opt/php-7.2.34/bin/php /opt/php-7.3.25/bin/php /opt/php-7.4.13/bin/php /usr/share/man/man1/php.1.gz
findコマンド
$ find /opt/php-7*/bin -type f -name 'php' /opt/php-7.0.0/bin/php /opt/php-7.0.16/bin/php ... /opt/php-7.4.13/bin/php /opt/php-7.4.2/bin/php /opt/php-7.4.3/bin/php /opt/php-7.4.4/bin/php /opt/php-7.4/bin/php
上記コマンドで利用可能な最新バージョンのPHPは “7.4.13” でしたので以降このバージョンを設定していきます。
ホームディレクトリに bin ディレクトリ作成
利用するPHPのシンボリックリンクを作成するためホームディレクトリ以下に bin ディレクトリを作成します。
$ mkdir $HOME/bin
シンボリックリンクを作成する
$ ln -s /opt/php-7.4.13/bin/php $HOME/bin/php
上記コマンド実行後、bin ディレクトリ内にシンボリックリンクが作成されているか確認します。
$ ll 合計 0 lrwxrwxrwx 1 [サーバーID] members 23 2月 2 00:58 php -> /opt/php-7.4.13/bin/php
.bashrc にパスを通す
“vi” で “~/.bashrc” を開くとデフォルトで以下の内容が記述されています。
$ vi ~/.bashrc
# .bashrc # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi # User specific aliases and functions
先ほど、bin ディレクトリにパスを通すため最終行に以下を追加します。
export PATH=$HOME/bin:$PATH
設定内容を反映させる
以下のように sourceコマンドを実行して設定内容を反映させます。
$ source ~/.bashrc
設定変更後のPHPバージョン確認
以下のようにデフォルトの “5.4.16” から “7.4.13” のバージョンに設定変更出来ていることが確認できます。
$ 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
コマンドのみ
ln -s /opt/php-7.4.28/bin/php $HOME/bin/php echo '' >> ~/.bashrc echo 'export PATH=$HOME/bin:$PATH' >> ~/.bashrc source ~/.bashrc
動作環境情報
エックスサーバー(x10) エックスサーバービジネス(B10)
コメント
composerでのインストールで、phpバージョンが上がらずハマりました。
エックスサーバ、なんか独特ですよね。
とても助かりました。
ありがとうございました。
管理画面から設定するPHPと設定箇所・方法が異なりますので、ハマりますよね。
お役に立てて幸いです(^^
要を得た記事を有難うございます。
ただ、binディレクトリに移動してシンボリックリンクを解除しようとした際、
「’php’ を unlink できません: 許可がありません」と表示されてしまいました。
この事象について何かご存じないでしょうか。
コメント有り難うございますm(_ _)m
試しに私の環境で 7.4.13 から 7.4.33 へ変更してみました。
rm コマンドで設定済のシンボリックリンクを削除してみましたが、
特に問題は起きないようでした。
—
$ cd $HOME/bin
$ ll
php -> /opt/php-7.4.13/bin/php
$ rm php
$ ll
$ ln -s /opt/php-7.4.33/bin/php $HOME/bin/php
$ ll
php -> /opt/php-7.4.33/bin/php
早速のご返信を有難うございます。
何故かは判らないのですが、再度 ls -l を実行した所、
php -> /opt/php-8.1.22/bin/php との表記が確認出来ました。
しかし php -v を実行すると
PHP 5.4.16 (cli) と表示されてしまいました。
パスを通した状態でもバージョン変わりませんでしょうか?
パスが通っている場合、一度 SSHの接続を閉じていただいて再接続後にご確認お願い致します。
ご指摘ありがとうございます。
再度パスを通してみましたが、バージョンに変更ありませんでした。
しかし、先程も時間差でシンボリックリンクの変更が反映されましたので、
暫く待っていれば良いのかもしれません。
んーなんでしょうね。
念の為 8.1.22 への変更試してみましたが、当方環境は直ぐに反映されておりました。
—
$ php -v
PHP 8.1.22 (cli) (built: Aug 15 2023 11:02:44) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.22, Copyright (c) Zend Technologies
すみません、大変な勘違いをしていました。
php -> /opt/php-8.1.22/bin/php の表記が確認出来たのは
homeディレクトリであり、binディレクトリではありませんでした。
改めてbinディレクトリに入り、unlink、rmを試みましたが、
やはり許可が無いために実行できませんでした。
homeディレクトリで表記確認出来るということは、シンボリックリンクがbinディレクトリ内でなはくhome以下にあるということでしょうか?
確かに、そういうことになりますね。
追記
サポートに問い合わせてみたところ、「リンクの張替えを行う必要はなく、実行するコマンドにおいてPHPバージョンを指定すればよい」との回答を頂きました。
問い合わせ有り難うございます!
コマンド実行時のバージョン指定に不都合ない場合は問題ないと思います。
当方の愚問にお答え頂きまして、こちらこそ有難うございました。
ご親切に感謝致します。