app/webroot/index.php(CakePHP解析 #1)

はてな自習室から、こっちへ移動。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のinclude_path

ここが重要ですね。探す順番。

PHP実行ファイルからrequire()、include()等で読み出されるファイルは、次の順番で探されます。

  1. include_pathで設定されているディレクトリ

  2. 実行しているファイルのあるディレクトリ

  3. ./ 又は ../ で始まっている場合は、 実行しているファイルのあるディレクトリからの相対パス

更に、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の概念がよく分かってなかったので早速勉強になりました。