/app/webroot/index.phpを読む-CakePHPをもくじとしてPHPを学ぶ03
前回に.htaccessを追って/app/webroot/index.phpにたどり着きました。 今回はindex.phpの中身を見ます。以下中身です。
<?php if (!defined('DS')) { define('DS', DIRECTORY_SEPARATOR); } if (!defined('ROOT')) { define('ROOT', dirname(dirname(dirname(__FILE__)))); } if (!defined('APP_DIR')) { define('APP_DIR', basename(dirname(dirname(__FILE__)))); } if (!defined('WEBROOT_DIR')) { define('WEBROOT_DIR', basename(dirname(__FILE__))); } if (!defined('WWW_ROOT')) { define('WWW_ROOT', dirname(__FILE__) . DS); } if (php_sapi_name() == 'cli-server') { if ($_SERVER['REQUEST_URI'] !== '/' && file_exists(WWW_ROOT . $_SERVER['REQUEST_URI'])) { return false; } $_SERVER['PHP_SELF'] = '/' . basename(__FILE__); }
まず色々定数を定義してますね。 サーバーのドキュメントルートが/var/www/htmlだったとして、そこにダウンロードした/cakephpディレクトリを置いてる場合、定義した定数はそれぞれ
- DS = /
- ROOT = /var/www/html/cakephp/
- APP_DIR = app
- WEBROOT_DIR = webroot
- WWW_ROOT = /var/www/html/cakephp/app/webroot/
- $_SERVER['PHP_SELF'] = /cakephp/app/webroot/index.php
になります。以下続きのコードです。
<?php if (!defined('CAKE_CORE_INCLUDE_PATH')) { if (function_exists('ini_set')) { ini_set('include_path', ROOT . DS . 'lib' . PATH_SEPARATOR . ini_get('include_path')); } if (!include ('Cake' . DS . 'bootstrap.php')) { $failed = true; } } else { if (!include (CAKE_CORE_INCLUDE_PATH . DS . 'Cake' . DS . 'bootstrap.php')) { $failed = true; } } if (!empty($failed)) { trigger_error("CakePHP core could not be found. Check the value of CAKE_CORE_INCLUDE_PATH in APP/webroot/index.php. It should point to the directory containing your " . DS . "cake core directory and your " . DS . "vendors root directory.", E_USER_ERROR); } App::uses('Dispatcher', 'Routing'); $Dispatcher = new Dispatcher(); $Dispatcher->dispatch( new CakeRequest(), new CakeResponse() );
次に、パスを通してます。 CAKE_CORE_INCLUDE_PATHは定義してないので、このif文には入ります。 次に、ini_set('include_path',...)でライブラリのパスを通します。 そんでもってbootstrap.phpをincludeします。 このbootstrap.phpでは他ディレクトリにあるクラスなどを自動でロードしてくれるので、規約通りにファイル名等を設定していれば、includeやrequireしなくてもclassが使えるようになります。
その後Dispatcher
というクラスのインスタンスを生成してますね。
次回はbootstrap.phpの中身を見るかDispatcherを見に行くかどっちかかな。