CakePHP3を触ってみました 〜やはりwebrootは切り出そう〜

この記事はだいぶ前に書かれたものなので情報が古いかもしれません
本文とは特に何の関係もない画像です

この記事を三行にまとめると

やっぱりセキュリティ上、それはよろしくない
ようはURLでアクセスできるトップページ的な
一行だけなんで、全然たいした手間ではないです
今日は軽めのお話。次回は長くなっちゃいそうなので、今回は短めに行きましょう。

先日、CakePHP3のインストールについて書きました。

CakePHP3を触ってみました 〜composerって何やねん〜

このときはCakePHPの本体をURLでアクセスできる場所に置くような感じで進めましたが、やっぱりセキュリティ上、それはよろしくないと思います。

なので、必要なもの以外は別の場所に置いてみましょう。



フォルダ構成を見てみよう

インストールした直後だと、フォルダ構成がこんな感じになってるとと思います。

/bin
/config
/logs
/plugins
/src
/tests
/tmp
/vendor
/webroot

CakePHP3では、コントローラーやモデル、ビューなどは「src」というフォルダの下にまとめられているようです。

コアライブラリは「vendor」の下に入っています。vendorの下のcakephpの下にもういっちょcakephpがあって、その下のsrcというフォルダの中にあります。例えばController.phpだったら「/vendor/cakephp/cakephp/src/Controller/Controller.php」みたいな。だいぶ階層が深いですね。

そして「webroot」フォルダ。index.phpやcss、jsなどはここに入ってます。まあ、CakePHP1や2の頃もindex.phpたちはwebrootフォルダの中にありましたから、特に変化はないですね。

URLでアクセスできる場所には、このwebrootの中に入ってるファイルだけ置いとけば、ウェブサイトはちゃんと機能します。



webrootの中身を移動させよう

webrootの中をウェブルートに……ええと、ここで言う、カタカナで書いたウェブルートは、フォルダ名のwebrootではなくて、サーバーのウェブルートって意味です。ようはURLでアクセスできるトップページ的な。ややこしくてすまんです。

とにかく、そのウェブルートのフォルダを、ここでは「public_html」としときましょう。そんで、CakePHPの本体を置くフォルダを「cake」としときます。このcakeフォルダはpublic_htmlの外に置きます。

/cake
  /bin
  /config
  /logs
  /plugins
  /src
  /tmp
  /vendor

/public_html
 /index.php
  /css
  /js
  /img
  /.htaccess
  etc

だいぶ乱暴な書き方ですけど、こういうことです。これでcakeフォルダの方は、URLを叩いてもアクセスできない。

分けたら、index.phpの中身をちょちょっと書き換える。一行だけなんで、全然たいした手間ではないです。

index.phpを見ると、configフォルダの中にあるbootstrap.phpを読み込んでる部分があるので、ここを書き換えます。

require dirname(__DIR__) . '/config/bootstrap.php';
→require '/cakeフォルダまでのパス/config/bootstrap.php';

これだけです。

もしかしたら他にも書き換えなきゃいけないところがあるかもしれないけど、今のところ特に問題は起きてないので、何か発生したら追記したいと思います。



WWW_ROOTを書き換える

webrootの中身を別の場所に移した場合、定数の「WWW_ROOT」も書き換えといた方が良いです。

configフォルダの中にpath.phpってのがあるんですが、この中に「WWW_ROOT」があります。

define('WWW_ROOT', ROOT . DS . 'webroot' . DS);
→define('WWW_ROOT', 'public_htmlまでのパス');

こうしないと、WWW_ROOTがいつまでも、srcフォルダの下にあるwebrootフォルダのパスになっちゃう。






今回は以上です。

CakePHP2と比べると、そこまでフォルダ構成に変化がないようにも見えるけど……でも初めて見た時はガラッと変わったなぁという印象もあったような……モデルがTableとEntityっていう二つのフォルダに分かれてたり、ビューがTemplateとViewに分かれたり。

まあ、その辺のことはおいおい触れていきましょう。

ではまた次回お会いするときまで、アリーヴェデルチ!



その他のCakePHP3を触ってみましたの記事はこちら
まとめという名の箸休め
 もしかしたら何か関連しているかも? 
 質問や感想などお気軽にコメントしてください