app/webroot/index.php(CakePHP解析 #1)
Mon, May 5, 2008はてな自習室から、こっちへ移動。CakePHPを解析しつつPHPとCakePHPを勉強をしています。
まずは「app/webroot/index.php」からですが、ここで肝になるのは『include_path』ではないでしょうか。
if (!defined('CORE_PATH')) { if (function_exists('ini_set')) { ini_set('include_path', CAKE_CORE_INCLUDE_PATH . PATH_SEPARATOR . ROOT . DS . APP_DIR . DS . PATH_SEPARATOR . ini_get('include_path')); define('APP_PATH', null); define('CORE_PATH', null); } else { define('APP_PATH', ROOT . DS . APP_DIR . DS); define('CORE_PATH', CAKE_CORE_INCLUDE_PATH . DS); } }
で、include_pathってなんぞや?ってなるわけですが、こちらのデジットさんの説明がとっても分かりやすいです。
ここが重要ですね。探す順番。
PHP実行ファイルからrequire()、include()等で読み出されるファイルは、次の順番で探されます。
include_pathで設定されているディレクトリ
実行しているファイルのあるディレクトリ
./ 又は ../ で始まっている場合は、 実行しているファイルのあるディレクトリからの相対パス
更に、require()、include()されたファイル(例えば「inc.php」)の中にrequire()、include()がある場合は、当然上記のディレクトリを探した後に「inc.php」ファイルがあるディレクトリも探します。
自分の環境で「var_dump(ini_get(‘include_path’));」としてみたところ次のように出力されました。
string(57) “C:wwwschedule;C:wwwscheduleapp;.;C:xamppphppear”
CakePHPのフォルダを配置した場所が「C:wwwschedule」なので、CakePHPのルートに当たるディレクトリとその下層の「app」フォルダがinclude_pathに追加されたようです。ちなみに「.;C:xamppphppear」はphp.iniファイルに設定されていました。
このinclude_pathの設定により、requireやincludeでいちいち相対パスを指定する必要が無くなるわけですね。include_pathの概念がよく分かってなかったので早速勉強になりました。