エックスサーバーでコマンド実行時(CLI)に最新のPHPを利用出来るようにする方法

エックスサーバーに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)

コメント

  1. sana より:

    composerでのインストールで、phpバージョンが上がらずハマりました。
    エックスサーバ、なんか独特ですよね。
    とても助かりました。
    ありがとうございました。

    • 深尾 拓生 / FUKAO Takuo より:

      管理画面から設定するPHPと設定箇所・方法が異なりますので、ハマりますよね。
      お役に立てて幸いです(^^

  2. 埴谷 より:

    要を得た記事を有難うございます。
    ただ、binディレクトリに移動してシンボリックリンクを解除しようとした際、
    「’php’ を unlink できません: 許可がありません」と表示されてしまいました。
    この事象について何かご存じないでしょうか。

    • 深尾 拓生 / FUKAO Takuo より:

      コメント有り難うございます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) と表示されてしまいました。

        • 深尾 拓生 / FUKAO Takuo より:

          パスを通した状態でもバージョン変わりませんでしょうか?
          パスが通っている場合、一度 SSHの接続を閉じていただいて再接続後にご確認お願い致します。

          • 埴谷 より:

            ご指摘ありがとうございます。
            再度パスを通してみましたが、バージョンに変更ありませんでした。
            しかし、先程も時間差でシンボリックリンクの変更が反映されましたので、
            暫く待っていれば良いのかもしれません。

            • 深尾 拓生 / FUKAO Takuo より:

              んーなんでしょうね。
              念の為 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を試みましたが、
                やはり許可が無いために実行できませんでした。

                • 深尾 拓生 / FUKAO Takuo より:

                  homeディレクトリで表記確認出来るということは、シンボリックリンクがbinディレクトリ内でなはくhome以下にあるということでしょうか?

  3. 埴谷 より:

    追記
    サポートに問い合わせてみたところ、「リンクの張替えを行う必要はなく、実行するコマンドにおいてPHPバージョンを指定すればよい」との回答を頂きました。

    • 深尾 拓生 / FUKAO Takuo より:

      問い合わせ有り難うございます!
      コマンド実行時のバージョン指定に不都合ない場合は問題ないと思います。

      • 埴谷 より:

        当方の愚問にお答え頂きまして、こちらこそ有難うございました。
        ご親切に感謝致します。

タイトルとURLをコピーしました