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で「秘密鍵ファイルの選択」で、デフォルトでファイルが出てこないため、生成した暗号鍵は果たしてこれで正しいのだろうか、と感じてしまった点です。
「ファイルの種類」を「すべてのファイル(*.*)」を選択すると「ユーザ名.key」と言うファイルも出てきますので、それを選択すれば問題ありません。
また、ファイル名を「id_rsa」に変更しておけば、2回目以降は「ファイルの種類」を選択する必要がなくなりますので、その方が便利のように感じます。(ファイル名を変更しても何の問題もありません。)
もう一つは、説明に書いてあるのですが、パスフレーズも入力する必要がある、と言う点です。
いつも使っている環境ではパスフレーズの入力が必要ないため、パスフレーズは必要ないものと勝手に勘違いをしていました...
ちなみに、TeraTermのパスフレーズの入力は、コピペが可能ですが、「Ctrl + v」でのペーストはできません。
右クリックで出てくるダイアログの中から「貼り付け」を選択します。
この点も知っておくと便利です。
XSERVERの PHPのバージョンの確認方法
サーバーパネル(コントロールパネル、管理画面)の PHPのバージョンの確認
ブラウザでアクセスしたときに認識する PHPのバージョンは、XSERVERのサーバーパネル(コントロールパネル、管理画面)の「PHP Ver.切替」の画面で確認することができます。
コマンドラインから PHPのバージョンの確認
続いて、SSHでサーバにアクセスし、コマンドラインから下記のコマンドを入力して PHPのバージョンを確認します。
1 2 3 4 5 |
$ php -v PHP 5.4.16 (cli) (built: Oct 30 2018 19:30:51) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies with Zend OPcache v7.0.5, Copyright (c) 1999-2015, by Zend Technologies |
ここに表示されるバージョンが、サーバーパネルで設定した 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のバージョンがあることを確認します。
1 2 3 4 5 6 7 8 |
$ find /opt/php-*/bin -type f -name "php" /opt/php-4.4.9/bin/php /opt/php-5.1.6/bin/php : :中略 : /opt/php-7.2.14/bin/php /opt/php-7.2.6/bin/php |
2.シンボリックリンクを設定する
下記のコマンドを実行して、PHPのシンボリックリンクを作成します。
「ln -s」コマンドの「php-7.2.6」の部分を、サーバーパネルで設定した PHPのバージョンを指定します。
1 2 |
$ mkdir $HOME/bin $ ln -s /opt/php-7.2.6/bin/php $HOME/bin/php |
「mkdir」コマンドでフォルダを作成し、「ln -s」コマンドでシンボリックリンクを作成します。
「$HOME」は、ユーザのホームディレクトリの値が保存してある変数です。
「cat $HOME」を入力すると、その変数に指定してある値が表示されます。
(FTPで接続できるルートフォルダの場所が表示されます。)
「bin」フォルダは、コマンドでファイルを生成せず、FTPで接続して FTPで作成しても問題ありません。
シンボリックリンクは、Windowsでは「ショートカット」と呼ばれているものと同じ機能のもので、ファイルの実態ではなく、ファイルへのリンクの情報が記述された設定のことです。
ちなみに、php のシンボリックリンクがあり、上書きする場合は、lnコマンドのオプションに「-f」を足します。
1 |
$ ln -fs /opt/php-7.2.6/bin/php $HOME/bin/php |
3..bash_profile ファイルを編集する
$HOME/.bash_profile を編集します。
編集する内容は以下の通りです。
下記の 10行目を 11行目の内容に変更します。
行頭に「#」を編集すると、その行はコメントとなります。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs #PATH=$PATH:$HOME/bin PATH=$HOME/bin:$PATH export PATH |
「.bash_profile」は、ログイン時に実行される処理を記述したファイルです。
ここに、SSHで接続したときに使用する PHPのバージョンはこれですよ、という指定を行います。
「.bash_profile」ファイルの編集は、下記のように「vi」エディタで編集してもいいですし、FTPでファイルをダウンロードしてきてから編集してもいいです。
1 |
$ vi $HOME/.bash_profile |
4.PHPのバージョンを確認する
前項までで設定は終了ですので、一度 SSH接続を終了させて、改めて接続を行ってから、PHPのバージョンを確認します。
1 2 3 4 |
$ php -v PHP 7.2.6 (cli) (built: May 30 2018 21:41:35) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies |
「.bash_profile」は、SSH接続時に読み込まれるファイルですので、再接続すると PHPのバージョンが更新されて認識されるようになります。
CakePHP3をインストールする
前の項目で SSHで接続したときの PHPのバージョンをサーバーパネルで設定したバージョンと一致させることができたら、あとは普通通りに CakePHP3のインストールを行えば OKです。
1 2 |
$ cd $HOME/example.com $ composer create-project --prefer-dist cakephp/app public_html |
ちなみに、上記の通りにコマンドを入力すると、CakePHP3の最新バージョンがインストールされます。
もし、CakePHP3のバージョンを指定してインストールしたい場合は、下記に記事を書いていますので参考にしてください。
CakePHP3、CakePHP4、CakePHP5のバージョンを指定してインストールする詳細な手順を解説
また、上記は、「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のバージョンを指定してインストールすることもできます。
1 |
$ composer create-project --prefer-dist cakephp/app:3.7.* public_html |
ですが、SSHが認識している PHPが 5.4.16のため、CakePHP3は 3.1.14より先のバージョンは、「バージョンが違います、というエラーが出ます。」というエラーが出てインストールすることができませんでした。
CakePHP3のバージョンを指定してインストールする場合の詳しい解説は下記に記事を書いています。
CakePHP3、CakePHP4、CakePHP5のバージョンを指定してインストールする詳細な手順を解説
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
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
直リンクとは何か?直リンクとディープリンクの違いと著作権問題
直リンクは著作権違反なのか?議論の前にまず「直リンク」の意味を正しく理解しよう。直リンクは他のサイトの画像を読み込む、ディープリンクなど多様な意味がある。
-
PythonでURLの有無、存在をチェックするスクリプト
PythonでURLが存在するか否かのチェックスクリプト。ライブラリ「urllib2」を使い、指定のURLにアクセスしそのレスポンスコードを判別するという仕組み。
-
.gitignoreを更新しても反映されないときは「git rm -r –cached .」でキャッシュを削除
gitの.gitignoreを変更しても記述内容が反映されない時がある。それはGitのキャッシュが残っているため。そんなときは「git rm」コマンドを使ってキャッシュを削除すれば解決する。
-
So-netのレンタルサーバHSはヤバイ・借りてはいけないレンタルサーバリスト
餅は餅屋。サーバはサーバ屋が提供するサービスを利用するべきという記事で、単独でSo-netを紹介。OEMでサービスの提供を受けているだけなので何とも残念すぎる内容。
-
.htaccessのmod_deflateでファイル圧縮送信で高速化でSEO対策!
Page Speed Insightsの指摘事項であるファイルの圧縮送信の対応方法。処理内容の解説もあるけど、.htaccessにコピペするだけの簡単設置で効果抜群!SEOにも威力を発揮!
-
Gitで基本的なデプロイ(push、pullで本番公開)環境を作る手順解説
開発進行中の環境、公開中の環境にGitを導入する。その基本的な手続きを解説。Gitの導入、ローカルリポジトリを作成。リモートリポジトリを利用し、本番環境にデプロイする手続きを解説。
-
PythonでUTF-8など日本語(全角文字)を使う方法。コメントにも必要。
Pythonの標準では日本語(全角文字)を利用できないので、利用する際は文字コードを宣言する必要がある。「# coding: utf-8」の様に記述すればOK。
-
Webサイト公開時に重複コンテンツを排除する.htaccessのリダイレクトの設定のまとめ
サイトを公開する際にはURLの正規化は必須です。正規化とは何かを解説し、.htaccessに設定すべきリダイレクトの設定を具体的に説明します。
-
サイト更新、引越時に.htaccessでリダイレクトする方法解説
サイト更新,引越しなどでサイトのURLが変わった場合のリダイレクトを.htaccessのRewriteEngineを使って処理する方法の解説です。
-
mod_pagespeedカスタマイズで高速化を詳細解説・Google謹製
mod_pagespeedをデフォルトのまま使っていませんか?mod_pagespeedはデフォルトのままでも速い!でも仕組みを理解し設定し直せばより速くなる!