エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


XSERVERにCakePHP3をインストール。コマンドラインのPHPのバージョンを変更する方法で解決

      2019/03/17

XSERVERに CakePHP3をインストールするとき何が問題なのか?

 

デフォルトのままでは XSERVERに CakePHP3を正しくインストールできない

 
XSERVERのレンタルサーバで CakePHP3をインスロールするとき
・インストールが上手くいかない
・Composerが使えない
・エラーが解消できない
なんていう話があちこちにあります。
 
ですが、それらの上手くいかない根本的な原因は、XSERVERのサーバーパネル(コントロールパネル、管理画面)で設定する PHPのバージョンと、SSHで接続したときのコマンドラインで認識している PHPのバージョンが違うためです。
そのため、CakePHP3を正しくインストールすることができないのです。
 
そのため、対応方法は、
コマンドラインで認識する PHPのバージョンをサーバーパネル(コントロールパネル、管理画面)で設定した PHPのバージョンと一致させる
ことです。
 
この対応をしっかりやっておけば、CakePHP3のインストールは、広く一般的に紹介されている Composerを使った方法でインストールすることができます。
さらに、プラグインのインストールの際も問題は発生しなくなります。
 


 

コマンドラインから認識する PHPのバージョンを変更する手順

 
さてさて、前置きが長くなりましたが、コマンドラインから認識する PHPのバージョンを、サーバーパネル(コントロールパネル、管理画面)で設定している PHPのバージョンに一致させる方法の手順を紹介します。
 
 

XSERVERに SSHで接続する方法

 
まず、PHPのバージョンを確認します。
 
が、その前、CakePHP3をインストールするには、コマンドラインからコマンドを入力していきますので、SSHでの接続が必要になってきます。
 
XSERVERで SSH接続する方法は、下記のオフィシャルサイトに解説がありますので確認してください。
下記の解説に沿って進めていけば接続できます。
 
SSH設定・SSH接続の有効化・無効化/公開鍵認証用鍵ペアの生成、公開鍵の登録
https://www.xserver.ne.jp/manual/man_server_ssh.php
 
SSHソフトの設定(Tera Term)
https://www.xserver.ne.jp/manual/man_server_ssh_connect_tera.php
 
 
ただ、私が分かりにくかったポイントが 2つあります。
 
1つは、「サーバー上で公開鍵認証用鍵ペアの生成を行う場合」で生成した暗号鍵は、「ユーザ名.key」というファイル名で生成されます。
 
ですが、TeraTermで「秘密鍵ファイルの選択」で、デフォルトでファイルが出てこないため、生成した暗号鍵は果たしてこれで正しいのだろうか、と感じてしまった点です。
 
01_XSERVERにCakePHP3をインストール。コマンドラインのPHPのバージョンを変更する方法で解決
 
「ファイルの種類」を「すべてのファイル(*.*)」を選択すると「ユーザ名.key」と言うファイルも出てきますので、それを選択すれば問題ありません。
 
また、ファイル名を「id_rsa」に変更しておけば、2回目以降は「ファイルの種類」を選択する必要がなくなりますので、その方が便利のように感じます。(ファイル名を変更しても何の問題もありません。)
 
もう一つは、説明に書いてあるのですが、パスフレーズも入力する必要がある、と言う点です。
いつも使っている環境ではパスフレーズの入力が必要ないため、パスフレーズは必要ないものと勝手に勘違いをしていました...
 
ちなみに、TeraTermのパスフレーズの入力は、コピペが可能ですが、「Ctrl + v」でのペーストはできません。
右クリックで出てくるダイアログの中から「貼り付け」を選択します。
この点も知っておくと便利です。
 
 

XSERVERの PHPのバージョンの確認方法

 

サーバーパネル(コントロールパネル、管理画面)の PHPのバージョンの確認

 
02_XSERVERにCakePHP3をインストール。コマンドラインのPHPのバージョンを変更する方法で解決
 
ブラウザでアクセスしたときに認識する PHPのバージョンは、XSERVERのサーバーパネル(コントロールパネル、管理画面)の「PHP Ver.切替」の画面で確認することができます。
 
 

コマンドラインから PHPのバージョンの確認

 
続いて、SSHでサーバにアクセスし、コマンドラインから下記のコマンドを入力して PHPのバージョンを確認します。
 

 
 
ここに表示されるバージョンが、サーバーパネルで設定した PHPのバージョンと同じであるか否かを確認します。
 
デフォルトのままであれば、一致しませんので、一致させる設定を行っていきます。
 
 

FTP接続と SSH接続時のパスの見え方の違い

 
SSHを使って作業を行う前に、FTPで接続したときと SSHで接続したときのパスの見え方が違うことも確認しておく必要があります。
 
例えば、「example.com」というドメインを設定したときのドキュメントルートのフォルダにいるとします。
 
この場合、SSHで接続し、現在のフォルダ(カレントフォルダ)を確認するコマンドは「pwd」ですが、このコマンドを入力して表示されるパスは、
/home/username/example.com/public_html
のように表示されます。
 
ですが、FTPでは
/example.com/public_html
の部分しか見えません。
 
この違いは認識しておく必要があります。
ブログなどを読む場合は、どちらのフォルダを指して「ホームフォルダ」「ルートフォルダ」と言っているかを確認する必要があります。
 
 
また、FTPで接続した場合は、
/home/username/
がルートフォルダとなりますので、これより上位の階層には移動することができません。
ですが、SSHで接続した場合は、
/
である、実際のサーバのルートフォルダまで移動することができます。
 
 

SSHで接続したときに認識される PHPのバージョンを変更する手順

 

1.利用できる PHPのバージョンを確認する

 
下記コマンドを実行すると、利用できる PHPのバージョンが表示されます。
この中に、サーバーパネルで設定した PHPのバージョンがあることを確認します。
 

 
 

2.シンボリックリンクを設定する

 
下記のコマンドを実行して、PHPのシンボリックリンクを作成します。
「ln -s」コマンドの「php-7.2.6」の部分を、サーバーパネルで設定した PHPのバージョンを指定します。
 

 
「mkdir」コマンドでフォルダを作成し、「ln -s」コマンドでシンボリックリンクを作成します。
 
「$HOME」は、ユーザのホームディレクトリの値が保存してある変数です。
「cat $HOME」を入力すると、その変数に指定してある値が表示されます。
(FTPで接続できるルートフォルダの場所が表示されます。)
 
「bin」フォルダは、コマンドでファイルを生成せず、FTPで接続して FTPで作成しても問題ありません。
 
シンボリックリンクは、Windowsでは「ショートカット」と呼ばれているものと同じ機能のもので、ファイルの実態ではなく、ファイルへのリンクの情報が記述された設定のことです。
 
 

3..bash_profile ファイルを編集する

 
$HOME/.bash_profile を編集します。
 
編集する内容は以下の通りです。
下記の 10行目を 11行目の内容に変更します。
行頭に「#」を編集すると、その行はコメントとなります。
 

 
「.bash_profile」は、ログイン時に実行される処理を記述したファイルです。
ここに、SSHで接続したときに使用する PHPのバージョンはこれですよ、という指定を行います。
 
「.bash_profile」ファイルの編集は、下記のように「vi」エディタで編集してもいいですし、FTPでファイルをダウンロードしてきてから編集してもいいです。

 
 

4.PHPのバージョンを確認する

 
前項までで設定は終了ですので、一度 SSH接続を終了させて、改めて接続を行ってから、PHPのバージョンを確認します。
 

 
「.bash_profile」は、SSH接続時に読み込まれるファイルですので、再接続すると PHPのバージョンが更新されて認識されるようになります。
 
 

CakePHP3をインストールする

 
前の項目で SSHで接続したときの PHPのバージョンをサーバーパネルで設定したバージョンと一致させることができたら、あとは普通通りに CakePHP3のインストールを行えば OKです。
 

 
ちなみに、上記の通りにコマンドを入力すると、CakePHP3の最新バージョンがインストールされます。
 
もし、CakePHP3のバージョンを指定してインストールしたい場合は、下記に記事を書いていますので参考にしてください。
CakePHP3のバージョンを指定してインストールする詳細な手順を解説
 
 
また、上記は、「example.com」のドメインを当てたドキュメントルートのフォルダ「public_html」にインストールする場合の設定です。
 
この場合、「public_html」はすでにあるフォルダですが、このフォルダの中にあるファイルはすべて削除してください。
ファイルが入っていると、下記のエラーが出てインストールすることができなくなります。
 
[InvalidArgumentException]
Project directory public_html/ is not empty.

 
ただし、もともと入っている .htaccessファイルはバックアップを取っておいてください。
XSERVERのサーバーパネルで設定した内容などが記述されていますので、CakePHP3をインストールした後、.htaccessに記述されていた内容を追記する必要があります。
 
 
SSHで接続したときとブラウザでアクセスするときの PHPのバージョンを一致させていますので、プラグインをインストールするときなども、XSERVERであることを意識せず、一般的な Composerを使ったインストール手続きでインストールすることができます。
 
 

SSHで接続したときに認識される PHPのバージョンを変更した場合の注意点

 
実際に設定してみると分かるのですが、SSHで接続したときに認識される PHPのバージョンの設定は、ユーザ全体に影響するという点です。
 
つまり、例えば、下記の 2つのドメインを XSERVERで運用していたとします。
「s-giken.net」
「s-giken.info」
 
「s-giken.net」は、簡単なプログラムしか動いていないため PHP 7.1にバージョンアップしました。
「s-giken.info」は、複数のプログラムが動いているため PHP 5.6で運用しています。
 
という感じで、複数のバージョンの PHPが動いていても、SSHでアクセスしたときに認識される PHPのバージョンは「.bash_profile」に設定した(「$home/bin」に配置した PHPのシンボリックリンクのバージョン)一つだけになります。
 
そのため、上記のように PHPのバージョンが違うサイトがあり、それぞれに CakePHP3が入っているような場合は、その都度 SSHの PHPのバージョンを切り替えながら対応するしかありません。
 
これが手間だと感じるならば、サーバーパネルから CakePHP3が動いているドメインの PHPのバージョンをそろえるしかありません。
 


 

XSERVERに CakePHP3をインストールする方法の失敗例

 
先に解説したような、SSHで接続したときの PHPのバージョンを変更する方法を採らずに CakePHP3をインストールするとどうなるか、実際に複数の方法にチャレンジした結果を紹介しておきます。
 
失敗は成功の基ですからね。
私は、数々の失敗を繰り返し、問題の本質に行きつきましたが、他の方も同じ失敗を繰り返す必要はありませんので、他の方法ではこんな不具合が発生するのだな、と参考にしてもらえれば、と思います。
 
 

Composerを使ってインストールをする方法・一般的な手順でのインストール

 
XSERVERには Composerがあらかじめ入っていますので、Composerを使えば CakePHP3をインストールすることはできます。
 
ただし、SSHで接続したときに認識されている PHPのバージョンは、私の環境では「PHP 5.4.16 (cli) (built: Oct 30 2018 19:30:51)」でしたので、インストールされた CakePHP3のバージョンは「3.1.14」でした。
 
ですが、サーバーパネルで設定していた PHPのバージョンは「7.2.6」でしたので、その違いによりいろいろなエラーが出ていました。
 
 
一番上に出ていたエラーは下記のものでした。
 
Warning (2): Declaration of Carbon\Carbon::setTime($hour, $minute, $second = 0) should be compatible with DateTime::setTime($hour, $minute, $second = NULL, $microseconds = NULL) [ROOT/vendor/nesbot/carbon/src/Carbon/Carbon.php, line 0]
 
これは、時間の設定に関する関数のパラメーターの数が、PHPのバージョンの違いで異なるために発生しているエラーでした。
これは、エラーが出ている「ROOT/vendor/nesbot/carbon/src/Carbon/Carbon.php」の該当の個所のパラメーターに適当な変数を追加し、数を合わせるとエラーを消すことはできます。
 
ただ、他にも下記のようなエラーが出ているため、全て対応するのはうんざりします。
 
Warning: count() [function.count]: Parameter must be an array or an object that implements Countable in /home/ss-giken/ttt.onl/public_html/vendor/cakephp/cakephp/src/Database/QueryCompiler.php on line 115
 
 
他の対処方法としては、インストールされている CakePHP3は、SSHで認識されている PHPのバージョンとしては正しいものですので、サーバーパネルで設定する PHPのバージョンを「5.4.x」などに合わせることでエラーは解消し、正しく動作させることができます。
 
とはいえ、PHPも古く、CakePHP3も古いバージョンを選択するメリットはありません。
 
 

Composerを使ってインストールをする方法・CakePHP3のバージョンを指定する

 
Composerを使って CakePHP3をインストールする場合、CakePHP3のバージョンを指定しないときは、最新版の CakePHP3がインストールされます。
 
ですが、下記のように CakePHP3のバージョンを指定してインストールすることもできます。
 

 
ですが、SSHが認識している PHPが 5.4.16のため、CakePHP3は 3.1.14より先のバージョンは、「バージョンが違います、というエラーが出ます。」というエラーが出てインストールすることができませんでした。
 
 
CakePHP3のバージョンを指定してインストールする場合の詳しい解説は下記に記事を書いています。
CakePHP3のバージョンを指定してインストールする詳細な手順を解説
 
 

Composerを使わず手作業でインストールする方法

 
SSHで接続したときの PHPのバージョンが違うために、ブラウザからアクセスしたときの PHPに対応できる CakePHP3がインストールできないならば、Composerを使わずに CakePHP3をインストールすればいい!と言う方法があります。
 
CakePHP3には Composerを使わなくてもインストールする方法があります。
 
 
まず、下記のページからインストールしたい CakePHP3をダウンロードします。
 
CakePHP3ダウンロード場所
https://github.com/cakephp/cakephp/tags
 
そして、展開(解凍)したのち、インストールする場所にすべてのファイルをアップロードします。
 
 
このままでは、「/config/app.php」が設置されていないため、「app.php」を用意します。
作成の方法は、「app.default.php」を複製し「app.php」にします。
 
ファイルを開いて、71行目ほどにある「salt」の値を作成します。
この saltの値は 64文字程度の英数字で作成した乱数を設置します。
 
乱数を作成する際は、ツールのツールを使ってもいいかと思います。
https://s-giken.info/random/random.php
 
64文字程度の英数字の乱数を作成することが面倒であれば、セキュリティの面からみてあまり適切ではないですが、他のサイトで使っている saltの値をコピペする方法もあります。
 
また、databaseの接続情報を編集して、サーバにアップします。
 
ここまで設定が終わり、ブラウザでアクセスすれば、CakePHP3が動作していることを確認することができます。
 
 
CakePHP3自体は正常にインストールされて動作しています。
ですが、このようにしてインストールした場合、インストール後も Composerを使用することができませんので、プラグインをインストールするときも手作業で設置する必要があります。
(Composerでインストールをしようとすると、PHPのバージョンが合わない、というエラーが出ます。)
 
CakePHP3の開発には慣れているので、Composerは使わなくてもいい!という方ならばこの方法もありだと思いますが、私は Composerを使ったインストールができない環境には耐えられませんでしたので、違う方法を探しました。
 
 
XSERVERに CakePHP3をインストールする方法として紹介されているいくつかの方法と、その時のどのようなエラーが発生するか、の紹介でした。
いくつか試してみて「何が問題になるのか」が分かりましたので、「SSHで接続したときに認識される PHPのバージョンを、サーバーパネルで設定している PHPのバージョンに合わせる設定をする方法」がオススメです!とハッキリと言えます。
この方法は、CakePHP3本体のインストールだけではなく、プラグインのインストール時にもエラーが発生しませんので、断然オススメです!

 - プログラミング・Web関連技術

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

FTPでダウンロード時にファイルが重複するため上書きしますか?と表示される問題

FTPでファイルをダウンロードする際に「ファイルが重複しています。上書きしますか?」というメッセージが出る場合がありますが、これの原因と対策、解決策の記事です。

ロリポップからX-Serverに引越し。サーバの月額費用が増えても求めた理由は?

ロリポップからX-Serverに引越すその理由とは?SEOの観点からも少しでもサーバレスポンスが早いサーバが求められロリポップでは限界を感じたからです。

Beautiful Soupを利用してPythonでスクレイピングを行う環境構築方法の解説

BeautifulSoupはPythonでスクレイピングを行う際に便利なツール。インストール方法も簡単。ただ、事前にpipのインストールが必要でその解説もしてます。

日本語は2バイト文字?3バイト文字?

日本語は2バイトという理解でしたが、UTF-8では事情が違います。その説明です。

Apacheの起動しているかの確認方法と起動、再起動、終了のコマンド
Apacheの起動しているかの確認方法と起動、再起動、終了のコマンド

Apacheが起動しているかを確認する方法の解説に加え、Apacheの起動、停止、再起動のコマンドを解説。再起動のコマンドには restart、condrestart、reload、gracefulがあり、違いを解説。

ブラウザのキャッシュを活用するの対策!広告バナーを消して表示を高速化

あなたのサイトが遅いのはバリューコマースのバナーではないですか?バリューコマースのバナーを外すだけでmod_deflateとmod_expiresを設定するより効果があります!

EストアのショップサーブのWordPressサービスにメリット無し

ショップサーブのオプションサービスのWordPressを使ってみましたがデータベースには直接触れず使えないサービスでした。

PythonでURLの有無、存在をチェックするスクリプト

PythonでURLが存在するか否かのチェックスクリプト。ライブラリ「urllib2」を使い、指定のURLにアクセスしそのレスポンスコードを判別するという仕組み。

CentOS環境に ntpdをインストールして自動的に時刻を取得する設定にする
CentOS環境に ntpdをインストールして自動的に時刻を取得して合わせる設定にする

VirtualBoxに構築した CentOSの環境の時計がずれているとき、ntpdをインストールし、時計を合わせる方法を解説。NTPサーバを指定する方法や ntpdを自動起動する設定も解説。

WordPress、Webサイトの表示高速化!画像を軽くする基本的な考え方

画面表示の高速化には画像のファイル容量を小さくする方法があります。ツールを使わなくても小さくするための基本的な考え方を解説します。