[CakePHP4]レンタルサーバーのエックスサーバーに配置とディレクトリ構成を変更する方法

[CakePHP4]レンタルサーバーのエックスサーバーに配置とディレクトリ構成を変更する方法
2021年06月03日2023年10月10日

今回レンタルーサーバーの老舗で大手であるエックスサーバーにCakePHP4を動作させることになりました。

レンタルサーバーにCakePHP4をそのままアップロードしても動作しますが、ディレクトリ構成を変更したくなったのでやり方を紹介します。

エックスサーバーの公開ディレクトリ

エックスサーバーの公開ディレクトリ(ドキュメントルート)は任意に変更できない仕様となっています。

好き勝手に公開ディレクトリを指定することができないため、エックスサーバーの仕様に合わす必要があります。

エックスサーバーの公開ディレクトリは下記になります。

// xxxx = サーバーID
// example.com = 独自ドメイン
/home/xxxx/example.com/public_html

仮にCakePHP4のプロジェクトをエックスサーバーの公開ディレクトリにアップロードすると下記のようになります。

public_html/
 ├ index.php
 ├ bin/
 ├ config/
 ├ src/
  ...
 └ webroot/

CakePHP4のドキュメントルートは「webroot」を指定する必要がありますが、プロジェクト直下にある.htaccessがwebrootにrewriteしている関係でこのディレクトリ構成でも動作させることができます。

しかし、エックスサーバーの公開ディレクトリから見るとCakePHP4のファイルが公開ディレクトリに配置されているのはちょっと気持ち悪いです。

もちろん.htaccessが有効になっていればセキュリティ上は問題ないですが、公開ディレクトリがCakePHP4のファイル群で汚染されているのもちょっと許せないです。

では、CakePHP4のファイル群を一回層の上に持っていこうとすると、一回層上(public_htmlの同階層)はエックスサーバーの設定ディレクトリがいっぱいあります。

234234232342342

ここにCakePHP4のファイル群も持ってくると、どれがエックスサーバーのディレクトリなのかわかりづらくなります。

そこでやりたかったのは「CakePHP4」のファイル群をまとめたディレクトリを作成することです。

CakePHP4用のディレクトリを作る

公開ディレクトリはそのままにして、CakePHP4のファイル群を「cakephp4」用のディレクトリに格納します。

2342424

ディレクトリ構成はこんな感じです。

public_html/
 ├ public_html/   ・・・webrootの中身をすべてpublic_htmlに持ってくる
 │ ├index.php
 │ ├ img
 │ ├ css/
 │  ...
 │ └ .htaccess
 ├cakephp/    ・・・webroot以外のcakephp4ファイル群は「cakephp」ディレクトリに移動
 │ ├ bin/
 │ ├ config/
 │ ├ src/
 │  ...
 │ └ vender
 ├xserver_php/
 │ └

このような構成にすることで、すっきりさせることができます。

ディレクトリ構成を変更したためCakePHP4側の設定を修正してあげる必要がでてきます。

CakePHP4の設定を修正する

まず、webroot配下(今はpublic_html配下)にあった「index.php」に記述されている読み込みパスを修正します。

public_html/index.php
// cakephp4のファイル群のディレクトリを指定
$cakeDir = '/cakephp'; // ☆追加

// Check platform requirements
require dirname(__DIR__) . $cakeDir.'/config/requirements.php'; // 修正

// For built-in server
if (PHP_SAPI === 'cli-server') {
    $_SERVER['PHP_SELF'] = '/' . basename(__FILE__);

    $url = parse_url(urldecode($_SERVER['REQUEST_URI']));
    $file = __DIR__ . $url['path'];
    if (strpos($url['path'], '..') === false && strpos($url['path'], '.') !== false && is_file($file)) {
        return false;
    }
}
require dirname(__DIR__) . $cakeDir.'/vendor/autoload.php'; // 修正

use App\Application;
use Cake\Http\Server;

// Bind your application to the server.
$server = new Server(new Application(dirname(__DIR__) . $cakeDir.'/config')); // 修正

// Run the request/response through the application and emit the response.
$server->emit($server->run());

つぎにpaths.phpという定数がまとめられているファイルを修正します。

cakephp/config/paths.php
//define('WWW_ROOT', ROOT . DS . 'webroot' . DS);
define('WWW_ROOT', dirname(ROOT) . DS . 'public_html' . DS); //エックスサーバーの公開ディレクトリに修正

app.phpファイルも修正します。

cakephp/config/app.php
    'App' => [
        ...
        //'webroot' => 'webroot',
        'webroot' => 'public_html', // エックスサーバーの公開ディレクトリに修正

修正箇所は以上になります。

動作確認

先ほどのファイルを修正することで、CakePHP4を動作させることができます。

2342342342

外部プラグインで「webroot」を直書きしているプラグインが存在します。外部プラグインを入れる場合は必ず動作確認をおこなってください。
(確か画像アップロード系のプラグインだったはず。名前忘れました。。。)

さいごに

今回はエックスサーバーにCakePHP4を配置して且つディレクトリ構成を変更する方法を紹介しました。

ディレクトリ構成の変更はとても簡単にできるようになっていますので、気になる方はトライしてみてください。

コメント

コメントを残す

お名前(任意)
コメント:新規