【Xserver】SSH接続したときのPHPのバージョンを変更する

【Xserver】SSH接続したときのPHPのバージョンを変更する

はじめに

本記事では、Xserver で SSH 接続した際の PHP のバージョンを変更する手順を書き留めています。

SSH 接続をする方法に関しては公式のマニュアルを参考にしてください。

管理画面で変更した PHP のバージョンは SSH 接続では反映されていない

Xserver では管理画面から PHP のバージョンを変更する機能があります。

php-version-change.png

ただし、管理画面から PHP バージョンを変更しても SSH 接続した環境では反映されてません。そのため、SSH 接続して何かしらの作業をする際に、最新の PHP が必要になる場合は PHP のバージョンを上げる作業が必要になります。

現在のバージョン確認から変更まで

作業環境

  • Windows11(22H2)
  • WSL: Ubuntu-20.04 Version 2

.bash_profile にパスを通しておく

$HOME/binへのパスが通っていない場合は設定して下さい。記憶が定かではないですが最初から設定されてたと思います…。

$ vi ~/.bash_profile

# ~ 中略 ~

# User specific environment and startup programs
PATH=$HOME/.config/composer/vendor/bin:$PATH:$HOME/bin # ← $HOME/bin が指定されているか確認

.bash_profile.bashrcの使い分けに関しては以下の記事が参考になりました。一読しておくと何をしているのか理解が深まるかもしれません。

PHP のバージョンを変更する

# 現在のバージョンを確認
$ php -v

# phpコマンドのパスを表示
$ which php
~/bin/php # 先頭のチルダ(~)はホームディレクトリという意味

# ファイルやディレクトリを検索する
$ find /opt/php-*/bin -type f -name 'php'
# ~ 中略 ~
/opt/php-7.4.25/bin/php
/opt/php-7.4.28/bin/php
/opt/php-7.4.3/bin/php
/opt/php-7.4.4/bin/php
/opt/php-7.4/bin/php
/opt/php-8.0.10/bin/php
/opt/php-8.0.12/bin/php
/opt/php-8.0.16/bin/php
/opt/php-8.0.6/bin/php
/opt/php-8.0.7/bin/php
/opt/php-8.0/bin/php
/opt/php-8.1.3/bin/php
/opt/php-8.1.6/bin/php
/opt/php-8.1/bin/php

$ ls -la /bin/ | grep php
# ~ 中略 ~
# /opt/ディレクトリ配下にシンボリックリンクがはられている事がわかる
php8.1-cgi -> /opt/php-8.1.6/bin/php-cgi

# 現在のシンボリックリンクを削除する
$ unlink ~/bin/php

# 指定したいバージョンのPHPとシンボリックリンクを貼る
$ ln -s /opt/php-8.1.6/bin/php ~/bin/php

# リンクが設定されているか確認
$ ls -la ~/bin/php
# /home/xxxxxxx/bin/php -> /opt/php-8.1.6/bin/php

# バージョン確認
$ php -v
PHP 8.1.6 (cli) (built: May 18 2022 18:18:39) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.6, Copyright (c) Zend Technologies

find コマンドを使用した検索ですが、 -type fとすることで検索対象をファイルのみに指定し、-name 'php'とすることでphpという文字列を含んだファイルのみ検索します。

$ find /opt/php-*/bin -type f -name 'php'

find コマンドには多くのオプションが存在しますが、オプションで-helpを指定して確認できます。

$ find -help
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

default path is the current directory; default expression is -print
expression may consist of: operators, options, tests, and actions:

operators (decreasing precedence; -and is implicit where no others are given):
      ( EXPR )   ! EXPR   -not EXPR   EXPR1 -a EXPR2   EXPR1 -and EXPR2
      EXPR1 -o EXPR2   EXPR1 -or EXPR2   EXPR1 , EXPR2

positional options (always true): -daystart -follow -regextype

normal options (always true, specified before other expressions):
      -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf
      --version -xautofs -xdev -ignore_readdir_race -noignore_readdir_race

tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N
      -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME
      -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex PATTERN
      -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE
      -nouser -nogroup -path PATTERN -perm [-/]MODE -regex PATTERN
      -readable -writable -executable
      -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N
      -used N -user NAME -xtype [bcdpfls]
      -context CONTEXT


actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print
      -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit
      -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;
      -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;

Report (and track progress on fixing) bugs via the findutils bug-reporting
page at http://savannah.gnu.org/ or, if you have no web access, by sending
email to <bug-findutils@gnu.org>.

シンボリックリンクとは簡単に言うとショートカットのようなもので、Windows で言うとショートカットフォルダを作成してアクセスしやすいようにしたり、実行ファイルexeのショートカットをデスクトップに配置してわざわざインストール配下のフォルダまで移動しないで良いようにしたりする機能です。

$ ln -s /opt/php-8.1.6/bin/php ~/bin/php

上記のコマンドを実行することで、/opt/php-8.1.6/bin/phpコマンド本体のショートカットを~/bin/配下にphp という名前で配置したことになります。

$HOME/binというパスは既に通っているので、php -vなどと実行することでバージョン 8.1.6 の PHP が実行されていることになります。