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