エス技研

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


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

      2023/06/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では「ショートカット」と呼ばれているものと同じ機能のもので、ファイルの実態ではなく、ファイルへのリンクの情報が記述された設定のことです。
 
 
ちなみに、php のシンボリックリンクがあり、上書きする場合は、lnコマンドのオプションに「-f」を足します。
 

 
 

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、CakePHP4のバージョンを指定してインストールする詳細な手順を解説
 
 
また、上記は、「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、CakePHP4のバージョンを指定してインストールする詳細な手順を解説
 
 

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本体のインストールだけではなく、プラグインのインストール時にもエラーが発生しませんので、断然オススメです!
 
 

CakePHP4 をインストールする際には Composer 2系が必要

 
XSERVERのデフォルトの Composerのバージョンは 1系のようです。
私のサーバでは「Composer version 1.9.1」でした。
 
CakePHP4をインストールする際には Composer 2.xが必要なようですので、Composerのバージョンアップをする必要があります。
 
Composer 1系でインストールをしようとすると大量のエラーメッセージが表示されますが、10行目くらいに下記のメッセージが表示されます。
Warning from https://repo.packagist.org: Support for Composer 1 is deprecated and some packages will not be available. You should upgrade to Composer 2. See https://blog.packagist.com/deprecating-composer-1-support/
 
【Google翻訳】
「https://repo.packagist.org からの警告: Composer 1 のサポートは廃止されており、一部のパッケージは使用できなくなります。 Composer 2 にアップグレードする必要があります。 https://blog.packagist.com/deprecating-composer-1-support/ を参照してください。」とのことですので、バージョンアップを行いましょう。
 
 
XSERVERで Composerのバージョンアップについては下記のサイトが参考になるかと思います。
https://analyzegear.co.jp/blog/1694
 
ちなみに、.bashrc編 に export PATH=$HOME/bin:$PATHを追加する箇所については下記が参考になるかと思います。
https://www.itmedia.co.jp/help/tips/linux/l0284.html

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

GoogleAdwords

GoogleAdwords

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

Message

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

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

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

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

  関連記事

コピーコンテンツ対策.htaccessで直リンク禁止しリダイレクトで対応

不正なコピーコンテンツからの直リンクを拒否する.htaccessの設定方法。拒否するサイトを指定、許可するサイトを指定する方法、単純な拒否と画像の差し替えを解説。

サイト更新、引越時に.htaccessでリダイレクトする方法解説

サイト更新,引越しなどでサイトのURLが変わった場合のリダイレクトを.htaccessのRewriteEngineを使って処理する方法の解説です。

PythonでUTF-8など日本語(全角文字)を使う方法。コメントにも必要。

Pythonの標準では日本語(全角文字)を利用できないので、利用する際は文字コードを宣言する必要がある。「# coding: utf-8」の様に記述すればOK。

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

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

mod_pagespeedでWebサイトを超簡単高速化・Google謹製の最終兵器

Webサイトの表示スピード高速化の最終兵器、Google謹製mod_pagespeedの解説です。レンタルサーバではX-Serverでしか利用できませんが、ワンクリックで高速化します。

.htaccessのmod_deflateでファイル圧縮送信で高速化でSEO対策!

Page Speed Insightsの指摘事項であるファイルの圧縮送信の対応方法。処理内容の解説もあるけど、.htaccessにコピペするだけの簡単設置で効果抜群!SEOにも威力を発揮!

.gitignoreを更新しても反映されないときは「git rm -r --cached .」でキャッシュを削除
.gitignoreを更新しても反映されないときは「git rm -r –cached .」でキャッシュを削除

gitの.gitignoreを変更しても記述内容が反映されない時がある。それはGitのキャッシュが残っているため。そんなときは「git rm」コマンドを使ってキャッシュを削除すれば解決する。

X Serverへの引越しの注意点まとめ。ロリポップとの違いと対処方法 6事例

ロリポップからX Serverに引越し。ロリポップとX Serverの違いに注目することでX Serverの設定方法を明確にします。またX Serverならではの設定ポイントなども解説。

コピーコンテンツ・直リンクの3つの対策Google通報などのまとめ

コピーコンテンツを発見したときにやること!Googleに通報、画像の直リンクを禁止、RSSの全文配信を停止。この対策をしないとあなたのサイトの評価も下がるかも!

PythonでMySQLへの接続ライブラリMySQL-pythonの簡単インストール方法

PythonはMySQLに接続するライブラリは別途インストールが必要。なのでMySQL-pythonライブラリのインストール方法とサンプルスクリプトで動作検証までを解説。