CakePHPのソースを読む 02
CakePHPのソースを読む。 app/webroot/index.php から開始 大別すると、以下の4つの要素にざっくりと分けることができます。
(1) ディレクトリの区切り文字の定数(DS)設定や、ROOT・APP_DIR・WEBROOT_DIR・WWW_ROOT等の定数定義
この辺はお約束ですね。その後のrequire, includeでpathを揃える為に、まずは重要所のディレクトリパスを定数化。
(2) built-in server向けの分岐
これは、気づいてなかった。ちなみにbuilt-in serverはphp5.4あたりから使えるようになりました。 CakePHPも下記のようなコマンドで動かせます。
1 | php -S localhost:3000 -t app/webroot |
これの何が良いかと言うと、開発時にapacheの設定とかしなくていいから、開発環境の構築がハイパー楽になる。 CakePHPではbuilt-in serverによる何がしかの影響を避けるために分岐が書かれているっぽい
1 | // for built-in server |
調べてい見ると、これはXSS対策のようです。参考サイト => $_SERVER[‘PHP_SELF’]は危険? - Pentan.info ファイル名の後ろにスクリプトタグ等が混入されている場合に、PHP_SELFとして渡ってきてしまうので、ファイルの存在チェックをすることで 悪意のあるスクリプトの混入を防いでいるんですね。 またいずれにしろ、basename(FILE)で余計なスクリプトを排除した形でPHP_SELFを上書きするので、実装者がうかつにPHP_SELFを使った実装をしても 安全なんですね。いやぁ、フレームワークは細かい所にも対策がされていますね。
(3) bootstrap.phpの読み込み
ここで、初めて他のファイルを読み込みました。ちなみに読み込みに失敗した場合はエラーで落ちるようになっています。
(4) 最後
1 | App::uses('Dispatcher', 'Routing'); |
いきなりApp:usesとか出てきます。Dispatcherも生成できるようになっています。 どうも、CakePHPの主要なファイルロードはbootstrap.phpが鍵のようです。 次はbootstrap.phpを一から読んで行きましょう。