CakePHPのソースを読む 02

2013-12-18

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
2
3
4
5
6
7
// for built-in server
if (php_sapi_name() === 'cli-server') {
if ($_SERVER['REQUEST_URI'] !== '/' && file_exists(WWW_ROOT . $_SERVER['PHP_SELF'])) {
return false;
}
$_SERVER['PHP_SELF'] = '/' . basename(__FILE__);
}

調べてい見ると、これはXSS対策のようです。参考サイト => $_SERVER[‘PHP_SELF’]は危険? - Pentan.info ファイル名の後ろにスクリプトタグ等が混入されている場合に、PHP_SELFとして渡ってきてしまうので、ファイルの存在チェックをすることで 悪意のあるスクリプトの混入を防いでいるんですね。 またいずれにしろ、basename(FILE)で余計なスクリプトを排除した形でPHP_SELFを上書きするので、実装者がうかつにPHP_SELFを使った実装をしても 安全なんですね。いやぁ、フレームワークは細かい所にも対策がされていますね。  

(3) bootstrap.phpの読み込み

ここで、初めて他のファイルを読み込みました。ちなみに読み込みに失敗した場合はエラーで落ちるようになっています。  

(4) 最後

1
2
3
4
5
6
7
App::uses('Dispatcher', 'Routing');

$Dispatcher = new Dispatcher();
$Dispatcher->dispatch(
new CakeRequest(),
new CakeResponse()
);

  いきなりApp:usesとか出てきます。Dispatcherも生成できるようになっています。 どうも、CakePHPの主要なファイルロードはbootstrap.phpが鍵のようです。   次はbootstrap.phpを一から読んで行きましょう。