tofucodes diary

にほんごのほう

ColorfulBoxでCLIのPHPのバージョンを変更する方法

www.colorfulbox.jp

ColorfulBoxというレンタルサーバーを使ってPHPのアプリケーションを公開してみました。

レンタルサーバーというものを人生で初めて触れているもので勝手がどうにも分からず、PHPのバージョン変更するだけでもだいぶ手こずってしまいました。

分かってしまえば簡単なことだったので自責の念を込めつつ共有します。

結論

  • WebサーバーのPHPバージョン設定とCLIPHPバージョンは別物
  • レンタルサーバーの都合上CLIPHP実体を変えることはできない
  • PATHの順番を弄って自分のホームディレクトリに配置したPHPを利用するようにする

2種類のPHPバージョン

そもそもPHPのバージョンと一口にいっても以下の2種類を考慮する必要があるみたいです。

  • WebサーバのPHPバージョン(つまりアプリケーションのランタイムで使われるPHP?)
  • CLIPHPバージョン

前者のPHPバージョンについてはColorfulBoxの管理画面であるcPanel上で変更できるようになっています。

help-cf.colorfulbox.jp

help.colorfulbox.jp

CLIPHPはというと以下のようにPHP 5.6.40がデフォルトで使われていて、このバージョンではcomposerやLaravelのコマンドで色々困ることが出てきます。

$ ll /usr/local/bin/
total 56
lrwxrwxrwx 1 root root    37 Dec 28 17:57 ea-php53 -> /opt/cpanel/ea-php53/root/usr/bin/php
lrwxrwxrwx 1 root root    37 Dec 28 17:57 ea-php54 -> /opt/cpanel/ea-php54/root/usr/bin/php
lrwxrwxrwx 1 root root    37 Dec 28 16:59 ea-php55 -> /opt/cpanel/ea-php55/root/usr/bin/php
lrwxrwxrwx 1 root root    37 Dec 28 16:59 ea-php56 -> /opt/cpanel/ea-php56/root/usr/bin/php
lrwxrwxrwx 1 root root    37 Dec 28 16:59 ea-php70 -> /opt/cpanel/ea-php70/root/usr/bin/php
lrwxrwxrwx 1 root root    37 Dec 28 17:57 ea-php71 -> /opt/cpanel/ea-php71/root/usr/bin/php
lrwxrwxrwx 1 root root    37 Dec 28 17:57 ea-php72 -> /opt/cpanel/ea-php72/root/usr/bin/php
-rwxr-xr-x 1 root root 28264 Aug 10  2017 lsphp
-rwxr-xr-x 1 root root 28264 Aug 10  2017 php

$ /usr/local/bin/php -v
ea-php-cli Copyright 2017 cPanel, Inc.
PHP 5.6.40 (cli) (built: Jan 24 2019 18:26:19)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
    with the ionCube PHP Loader v4.7.5, Copyright (c) 2002-2014, by ionCube Ltd.

かといって/usr/local/bin/phpの実体を他のバージョンにすることもレンタルサーバーの都合上、無理ですよね。

色々と試行錯誤して諦めかけたその時に、神の啓示が...(笑)

(結局はものすごい簡単なことで対応することができました)

方法

まずは/usr/local/bin/の中にあるPHPの一覧から自分の好きなバージョンを$HOME/bin/にコピーします。(例ではPHP 7.1)

$ cp /usr/local/bin/ea-php71 $HOME/bin/php #もしくは$HOME/.local/bin/php

次に$HOME/.bash_profileを編集します。

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

# PATH=$PATH:$HOME/.local/bin:$HOME/bin  # 元々はこれ
PATH=$HOME/.local/bin:$HOME/bin:$PATH  # こちらに変更

export PATH

このように編集することで/usr/local/bin/phpよりも$HOME/bin/phpが先に探索されるようになるので、先ほどコピーしたPHPを利用することができるようになります。

$ which php
~/bin/php

$ php -v
PHP 7.1.26 (cli) (built: Jan 24 2019 17:47:13) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
    with the ionCube PHP Loader (enabled) + Intrusion Protection from ioncube24.com (unconfigured) v10.2.4, Copyright (c) 2002-2018, by ionCube Ltd.

追記

書いてて思いついたんですけど、エイリアスとかでも対応できたかも?

$ alias php=/usr/local/bin/ea-php72

$ php -v
PHP 7.2.14 (cli) (built: Jan 24 2019 17:28:26) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with the ionCube PHP Loader (enabled) + Intrusion Protection from ioncube24.com (unconfigured) v10.2.4, Copyright (c) 2002-2018, by ionCube Ltd.
    with Zend OPcache v7.2.14, Copyright (c) 1999-2018, by Zend Technologies