エンジニ屋.com(エンジニヤドットコム)

分かりやすくを意識して情報発信!

【エラー対処】PHP Parse error: syntax error, unexpected 'class' (T_CLASS), expect...

Xserver上のCUIでPHP コマンドを使用したとき、件名のエラーが発生しました。
本記事は、1つの事例としてエラーの対処方法を紹介します。
おそらく大概のケースが、同じような理由でエラーが発生しているかと思います。

エラー文:PHP Parse error: syntax error, unexpected 'class' (T_CLASS), expecting identifier ( (T_VARIABLE) or '{' or '$' in /home/...の理由

英語を読むと

構文エラーです。予期していないclassが含まれています。

というような内容です。
これだけと何もピンこないので、ググってみると、

phpのバージョンが対応していないときに発生するエラー

のようです。
なんですと??
Xserverのコントローパネルでphp7.3と設定されているので、そんなはずは.....
一応phpのバージョンをコマンドで調べてみると、

php -v

返ってきた表示が

PHP 5.4.16 (cli) (built: Nov  1 2019 16:04:20)

うん、おかしい....
なぜか、php5.4.16が設定されている...
再度ググってみると、

エックスサーバーはコントロールパネルからPHPのバージョンを設定しても、コマンドライン上では"$ php" とだけで実行すると5系でコマンドが実行されてしまうらしい。

そんなことがあるのね... ということで、"$ php"のコマンドを実行した時にphp7.3が実行されるようにしたい。

phpコマンドの使用頻度が少ないなら

もし、そんなに頻繁に使用する必要がないなら$ php の代わりに

$ /usr/bin/php7.3

と実行してみましょう。
これだけで、php7.3としてコマンドライン上で実行可能です。

phpコマンドのみで実行を可能にしたい

頻繁にコマンドを実行する場合は、先ほどの方法だと面倒ですよね。
なのでphpのコマンドのみで実行できるように、シンボリックリンクを貼って指定するphpのバージョンを呼び出したいと思います。

手順1 利用可能なPHPのバージョンを調べる

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

のコマンドを打つと、下記のようにずらーっと使用できるphpバージョンが表示されます。

....
/opt/php-7.2.29/bin/php
/opt/php-7.2.34-2/bin/php
/opt/php-7.2.34/bin/php
/opt/php-7.2.6/bin/php
/opt/php-7.2/bin/php
/opt/php-7.3.14/bin/php
/opt/php-7.3.16/bin/php
/opt/php-7.3.25/bin/php
/opt/php-7.3.30/bin/php
/opt/php-7.3.31/bin/php
/opt/php-7.3.4/bin/php
/opt/php-7.3.8/bin/php
/opt/php-7.3/bin/php
/opt/php-7.4.13/bin/php
/opt/php-7.4.2/bin/php
...

長すぎるので、前後を省略しています。
これでphp-7.3が使用できることが確認が取れました。

手順2 シンボリックを貼る為に適当なディレクトリを作成

  • ディレクトリを作成
$ mkdir ~/opt
$ mkdir ~/opt/bin
  • シンボリックリンクを貼る
$ cd ~/opt/bin
$ ln -s /opt/php-7.3/bin/php php
  • シンボリックリンクの確認
$ ls -l

下記のように表示されていれば、シンボリックリンクは作成されています。

lrwxrwxrwx   1 hoge members       22  1月 2 10:02 php -> /opt/php-7.3/bin/php

もし改めてシンボリックリンクを貼りなおしたい場合は、下記コマンドで削除してください。

$ unlink php

手順3 PATHを通す

$ vi ~/.bashrc

.bashrcにパスを登録します。
下記を.bashrcの中に追記してください。

export PATH=$HOME/opt/bin:$PATH

手順4 バージョンを確認

一旦ログアウトしてください。
再度、sshでログイン後、

 $ php -v

PHP 7.3 (cli) (built: Jan 23 2021 03:19:40) 

完了しました。
以上となります。

下記記事を参考にさせて頂きました。ありがとうございます。
エックスサーバーのコマンドラインで `php` だけで特定のバージョンのPHPを実行できるようにする - Qiita
エックスサーバーのsshで任意のバージョンのphpを使えるようにする方法 | LOOP NEVER ENDS