diff options
Diffstat (limited to 'system')
-rw-r--r-- | system/core/CodeIgniter.php | 292 |
1 files changed, 180 insertions, 112 deletions
diff --git a/system/core/CodeIgniter.php b/system/core/CodeIgniter.php index 65c75a6c4..90cce1c6e 100644 --- a/system/core/CodeIgniter.php +++ b/system/core/CodeIgniter.php @@ -16,7 +16,7 @@ // ------------------------------------------------------------------------ /** - * System Front Controller + * System Initialization File * * Loads the base classes and executes the request. * @@ -27,100 +27,177 @@ * @link http://codeigniter.com/user_guide/ */ -// CI Version -define('CI_VERSION', '1.7.2'); +/* + * ------------------------------------------------------ + * Define the CodeIgniter Version + * ------------------------------------------------------ + */ + define('CI_VERSION', '2.0'); /* * ------------------------------------------------------ * Load the global functions * ------------------------------------------------------ */ -require(BASEPATH.'codeigniter/Common'.EXT); + require(BASEPATH.'core/Common'.EXT); /* * ------------------------------------------------------ * Load the compatibility override functions * ------------------------------------------------------ */ -require(BASEPATH.'codeigniter/Compat'.EXT); + require(BASEPATH.'core/Compat'.EXT); /* * ------------------------------------------------------ * Load the framework constants * ------------------------------------------------------ */ -require(APPPATH.'config/constants'.EXT); + require(APPPATH.'config/constants'.EXT); /* * ------------------------------------------------------ * Define a custom error handler so we can log PHP errors * ------------------------------------------------------ */ -set_error_handler('_exception_handler'); + set_error_handler('_exception_handler'); + + if ( ! is_php('5.3')) + { + @set_magic_quotes_runtime(0); // Kill magic quotes + } -if ( ! is_php('5.3')) -{ - @set_magic_quotes_runtime(0); // Kill magic quotes -} + // Set a liberal script execution time limit + if (function_exists("set_time_limit") == TRUE AND @ini_get("safe_mode") == 0) + { + @set_time_limit(300); + } /* * ------------------------------------------------------ - * Start the timer... tick tock tick tock... + * Set the subclass_prefix * ------------------------------------------------------ + * + * Normally the "subclass_prefix" is set in the config file. + * The subclass prefix allows CI to know if a core class is + * being extended via a library in the local application + * "libraries" folder. Since CI allows config items to be + * overriden via data set in the main index. php file, + * before proceeding we need to know if a subclass_prefix + * override exists. If so, we will set this value now, + * before any classes are loaded + * Note: Since the config file data is cached it doesn't + * hurt to load it here. */ + if (isset($assign_to_config['subclass_prefix']) AND $assign_to_config['subclass_prefix'] != '') + { + get_config(array('subclass_prefix' => $assign_to_config['subclass_prefix'])); + } -$BM =& load_class('Benchmark'); -$BM->mark('total_execution_time_start'); -$BM->mark('loading_time_base_classes_start'); +/* + * ------------------------------------------------------ + * Start the timer... tick tock tick tock... + * ------------------------------------------------------ + */ + $BM =& load_class('Benchmark', 'core'); + $BM->mark('total_execution_time_start'); + $BM->mark('loading_time:_base_classes_start'); /* * ------------------------------------------------------ * Instantiate the hooks class * ------------------------------------------------------ */ - -$EXT =& load_class('Hooks'); + $EXT =& load_class('Hooks', 'core'); /* * ------------------------------------------------------ * Is there a "pre_system" hook? * ------------------------------------------------------ */ -$EXT->_call_hook('pre_system'); + $EXT->_call_hook('pre_system'); + +/* + * ------------------------------------------------------ + * Instantiate the config class + * ------------------------------------------------------ + */ + $CFG =& load_class('Config', 'core'); + + // Do we have any manually set config items in the index.php file? + if (isset($assign_to_config)) + { + $CFG->_assign_to_config($assign_to_config); + } + +/* + * ------------------------------------------------------ + * Instantiate the Unicode class + * ------------------------------------------------------ + * + * Note: Order here is rather important as the Unicode + * class needs to be used very early on, but it cannot + * properly determine if UTf-8 can be supported until + * after the Config class is instantiated. + * + */ + $UNI =& load_class('Unicode', 'core'); + /* * ------------------------------------------------------ - * Instantiate the base classes + * Instantiate the URI class * ------------------------------------------------------ */ + $URI =& load_class('URI', 'core'); -$CFG =& load_class('Config'); -$URI =& load_class('URI'); -$RTR =& load_class('Router'); -$OUT =& load_class('Output'); +/* + * ------------------------------------------------------ + * Instantiate the routing class and set the routing + * ------------------------------------------------------ + */ + $RTR =& load_class('Router', 'core'); + $RTR->_set_routing(); + + // Set any routing overrides that may exist in the main index file + if (isset($routing)) + { + $RTR->_set_overrides($routing); + } /* * ------------------------------------------------------ - * Is there a valid cache file? If so, we're done... + * Instantiate the output class * ------------------------------------------------------ */ + $OUT =& load_class('Output', 'core'); -if ($EXT->_call_hook('cache_override') === FALSE) -{ - if ($OUT->_display_cache($CFG, $URI) == TRUE) +/* + * ------------------------------------------------------ + * Is there a valid cache file? If so, we're done... + * ------------------------------------------------------ + */ + if ($EXT->_call_hook('cache_override') === FALSE) { - exit; + if ($OUT->_display_cache($CFG, $URI) == TRUE) + { + exit; + } } -} /* * ------------------------------------------------------ - * Load the remaining base classes + * Load the Input class and sanitize globals * ------------------------------------------------------ */ + $IN =& load_class('Input', 'core'); -$IN =& load_class('Input'); -$LANG =& load_class('Language'); +/* + * ------------------------------------------------------ + * Load the Language class + * ------------------------------------------------------ + */ + $LANG =& load_class('Lang', 'core'); /* * ------------------------------------------------------ @@ -131,35 +208,33 @@ $LANG =& load_class('Language'); * conditionally load different versions of the base * class. Retaining PHP 4 compatibility requires a bit of a hack. * - * Note: The Loader class needs to be included first - * */ -if ( ! is_php('5.0.0')) -{ - load_class('Loader', FALSE); - require(BASEPATH.'codeigniter/Base4'.EXT); -} -else -{ - require(BASEPATH.'codeigniter/Base5'.EXT); -} - -// Load the base controller class -load_class('Controller', FALSE); - -// Load the local application controller -// Note: The Router class automatically validates the controller path. If this include fails it -// means that the default controller in the Routes.php file is not resolving to something valid. -if ( ! file_exists(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->fetch_class().EXT)) -{ - show_error('Unable to load your default controller. Please make sure the controller specified in your Routes.php file is valid.'); -} - -include(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->fetch_class().EXT); - -// Set a mark point for benchmarking -$BM->mark('loading_time_base_classes_end'); - + if (is_php('5.0.0') == TRUE) + { + require(BASEPATH.'core/Base5'.EXT); + } + else + { + // The Loader class needs to be included first when running PHP 4.x + load_class('Loader', 'core'); + require(BASEPATH.'core/Base4'.EXT); + } + + // Load the base controller class + require BASEPATH.'core/Controller'.EXT; + + // Load the local application controller + // Note: The Router class automatically validates the controller path using the router->_validate_request(). + // If this include fails it means that the default controller in the Routes.php file is not resolving to something valid. + if ( ! file_exists(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->fetch_class().EXT)) + { + show_error('Unable to load your default controller. Please make sure the controller specified in your Routes.php file is valid.'); + } + + include(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->fetch_class().EXT); + + // Set a mark point for benchmarking + $BM->mark('loading_time:_base_classes_end'); /* * ------------------------------------------------------ @@ -170,54 +245,48 @@ $BM->mark('loading_time_base_classes_end'); * loader class can be called via the URI, nor can * controller functions that begin with an underscore */ -$class = $RTR->fetch_class(); -$method = $RTR->fetch_method(); - -if ( ! class_exists($class) - OR $method == 'controller' - OR strncmp($method, '_', 1) == 0 - OR in_array(strtolower($method), array_map('strtolower', get_class_methods('Controller'))) - ) -{ - show_404("{$class}/{$method}"); -} + $class = $RTR->fetch_class(); + $method = $RTR->fetch_method(); + + if ( ! class_exists($class) + OR $method == 'controller' + OR strncmp($method, '_', 1) == 0 + OR in_array(strtolower($method), array_map('strtolower', get_class_methods('Controller'))) + ) + { + show_404("{$class}/{$method}"); + } /* * ------------------------------------------------------ * Is there a "pre_controller" hook? * ------------------------------------------------------ */ -$EXT->_call_hook('pre_controller'); + $EXT->_call_hook('pre_controller'); /* * ------------------------------------------------------ - * Instantiate the controller and call requested method + * Instantiate the requested controller * ------------------------------------------------------ */ + // Mark a start point so we can benchmark the controller + $BM->mark('controller_execution_time_( '.$class.' / '.$method.' )_start'); + + $CI = new $class(); -// Mark a start point so we can benchmark the controller -$BM->mark('controller_execution_time_( '.$class.' / '.$method.' )_start'); - -$CI = new $class(); - -// Is this a scaffolding request? -if ($RTR->scaffolding_request === TRUE) -{ - if ($EXT->_call_hook('scaffolding_override') === FALSE) - { - $CI->_ci_scaffolding(); - } -} -else -{ - /* - * ------------------------------------------------------ - * Is there a "post_controller_constructor" hook? - * ------------------------------------------------------ - */ +/* + * ------------------------------------------------------ + * Is there a "post_controller_constructor" hook? + * ------------------------------------------------------ + */ $EXT->_call_hook('post_controller_constructor'); - - // Is there a "remap" function? + +/* + * ------------------------------------------------------ + * Call the requested method + * ------------------------------------------------------ + */ + // Is there a "remap" function? If so, we call it instead if (method_exists($CI, '_remap')) { $CI->_remap($method); @@ -232,48 +301,47 @@ else } // Call the requested method. - // Any URI segments present (besides the class/function) will be passed to the method for convenience - call_user_func_array(array(&$CI, $method), array_slice($URI->rsegments, 2)); + // Any URI segments present (besides the class/function) will be passed to the method for convenience + call_user_func_array(array(&$CI, $method), array_slice($URI->rsegments, 2)); } -} -// Mark a benchmark end point -$BM->mark('controller_execution_time_( '.$class.' / '.$method.' )_end'); + + // Mark a benchmark end point + $BM->mark('controller_execution_time_( '.$class.' / '.$method.' )_end'); /* * ------------------------------------------------------ * Is there a "post_controller" hook? * ------------------------------------------------------ */ -$EXT->_call_hook('post_controller'); + $EXT->_call_hook('post_controller'); /* * ------------------------------------------------------ * Send the final rendered output to the browser * ------------------------------------------------------ */ - -if ($EXT->_call_hook('display_override') === FALSE) -{ - $OUT->_display(); -} - + if ($EXT->_call_hook('display_override') === FALSE) + { + $OUT->_display(); + } + /* * ------------------------------------------------------ * Is there a "post_system" hook? * ------------------------------------------------------ */ -$EXT->_call_hook('post_system'); + $EXT->_call_hook('post_system'); /* * ------------------------------------------------------ * Close the DB connection if one exists * ------------------------------------------------------ */ -if (class_exists('CI_DB') AND isset($CI->db)) -{ - $CI->db->close(); -} + if (class_exists('CI_DB') AND isset($CI->db)) + { + $CI->db->close(); + } /* End of file CodeIgniter.php */ |