当我尝试访问xampp服务器的localhost时,会出现如下错误:
致命错误:在“。”中找不到“CI_Controller”类 第226行的C:\ xampp \ htdocs \ system \ core \ CodeIgniter.php
CodeIgniter.php第222-227行:
require BASEPATH.'core/Controller.php';
function &get_instance()
{
return CI_Controller::get_instance();
}
完整CodeIgniter.php
<?php
if (!defined('BASEPATH')) {
exit('No direct script access allowed');
}
/*
* CodeIgniter
*
* An open source application development framework for PHP 5.1.6 or newer
*
* @package CodeIgniter
* @author ExpressionEngine Dev Team
* @copyright Copyright (c) 2008 - 2014, EllisLab, Inc.
* @license http://codeigniter.com/user_guide/license.html
* @link http://codeigniter.com
* @since Version 1.0
* @filesource
*/
// ------------------------------------------------------------------------
/*
* System Initialization File
*
* Loads the base classes and executes the request.
*
* @package CodeIgniter
* @subpackage codeigniter
* @category Front-controller
* @author ExpressionEngine Dev Team
* @link http://codeigniter.com/user_guide/
*/
/*
* CodeIgniter Version
*
* @var string
*
*/
define('CI_VERSION', '2.2.0');
/*
* CodeIgniter Branch (Core = TRUE, Reactor = FALSE)
*
* @var boolean
*
*/
define('CI_CORE', false);
/*
* ------------------------------------------------------
* Load the global functions
* ------------------------------------------------------
*/
require BASEPATH.'core/Common.php';
/*
* ------------------------------------------------------
* Load the framework constants
* ------------------------------------------------------
*/
if (defined('ENVIRONMENT') and
file_exists(APPPATH.'config/'.ENVIRONMENT.'/constants.php')) {
require APPPATH.'config/'.ENVIRONMENT.'/constants.php';
} else {
require APPPATH.'config/constants.php';
}
/*
* ------------------------------------------------------
* Define a custom error handler so we can log PHP errors
* ------------------------------------------------------
*/
set_error_handler('_exception_handler');
if (!is_php('5.3')) {
@set_magic_quotes_runtime(0); // Kill magic quotes
}
/*
* ------------------------------------------------------
* 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']));
}
/*
* ------------------------------------------------------
* 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...
* ------------------------------------------------------
*/
$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', 'core');
/*
* ------------------------------------------------------
* Is there a "pre_system" hook?
* ------------------------------------------------------
*/
$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 UTF-8 class
* ------------------------------------------------------
*
* Note: Order here is rather important as the UTF-8
* 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('Utf8', 'core');
/*
* ------------------------------------------------------
* Instantiate the URI class
* ------------------------------------------------------
*/
$URI = &load_class('URI', 'core');
/*
* ------------------------------------------------------
* 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);
}
/*
* ------------------------------------------------------
* Instantiate the output class
* ------------------------------------------------------
*/
$OUT = &load_class('Output', 'core');
/*
* ------------------------------------------------------
* Is there a valid cache file? If so, we're done...
* ------------------------------------------------------
*/
if ($EXT->_call_hook('cache_override') === false) {
if ($OUT->_display_cache($CFG, $URI) == true) {
exit;
}
}
/*
* -----------------------------------------------------
* Load the security class for xss and csrf support
* -----------------------------------------------------
*/
$SEC = &load_class('Security', 'core');
/*
* ------------------------------------------------------
* Load the Input class and sanitize globals
* ------------------------------------------------------
*/
$IN = &load_class('Input', 'core');
/*
* ------------------------------------------------------
* Load the Language class
* ------------------------------------------------------
*/
$LANG = &load_class('Lang', 'core');
/*
* ------------------------------------------------------
* Load the app controller and local controller
* ------------------------------------------------------
*
*/
// Load the base controller class
require BASEPATH.'core/Controller.php';
function &get_instance()
{
return CI_Controller::get_instance();
}
if (file_exists(APPPATH.'core/'.$CFG->config['subclass_prefix'].'Controller.php')) {
require APPPATH.'core/'.$CFG->config['subclass_prefix'].'Controller.php';
}
// 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().'.php')) {
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().'.php';
// Set a mark point for benchmarking
$BM->mark('loading_time:_base_classes_end');
/*
* ------------------------------------------------------
* Security check
* ------------------------------------------------------
*
* None of the functions in the app controller or the
* 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 strncmp($method, '_', 1) == 0
or in_array(strtolower($method), array_map('strtolower', get_class_methods('CI_Controller')))
) {
if (!empty($RTR->routes['404_override'])) {
$x = explode('/', $RTR->routes['404_override']);
$class = $x[0];
$method = (isset($x[1]) ? $x[1] : 'index');
if (!class_exists($class)) {
if (!file_exists(APPPATH.'controllers/'.$class.'.php')) {
show_404("{$class}/{$method}");
}
include_once APPPATH.'controllers/'.$class.'.php';
}
} else {
show_404("{$class}/{$method}");
}
}
/*
* ------------------------------------------------------
* Is there a "pre_controller" hook?
* ------------------------------------------------------
*/
$EXT->_call_hook('pre_controller');
/*
* ------------------------------------------------------
* 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();
/*
* ------------------------------------------------------
* Is there a "post_controller_constructor" hook?
* ------------------------------------------------------
*/
$EXT->_call_hook('post_controller_constructor');
/*
* ------------------------------------------------------
* Call the requested method
* ------------------------------------------------------
*/
// Is there a "remap" function? If so, we call it instead
if (method_exists($CI, '_remap')) {
$CI->_remap($method, array_slice($URI->rsegments, 2));
} else {
// is_callable() returns TRUE on some versions of PHP 5 for private and protected
// methods, so we'll use this workaround for consistent behavior
if (!in_array(strtolower($method), array_map('strtolower', get_class_methods($CI)))) {
// Check and see if we are using a 404 override and use it.
if (!empty($RTR->routes['404_override'])) {
$x = explode('/', $RTR->routes['404_override']);
$class = $x[0];
$method = (isset($x[1]) ? $x[1] : 'index');
if (!class_exists($class)) {
if (!file_exists(APPPATH.'controllers/'.$class.'.php')) {
show_404("{$class}/{$method}");
}
include_once APPPATH.'controllers/'.$class.'.php';
unset($CI);
$CI = new $class();
}
} else {
show_404("{$class}/{$method}");
}
}
// 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));
}
// Mark a benchmark end point
$BM->mark('controller_execution_time_( '.$class.' / '.$method.' )_end');
/*
* ------------------------------------------------------
* Is there a "post_controller" hook?
* ------------------------------------------------------
*/
$EXT->_call_hook('post_controller');
/*
* ------------------------------------------------------
* Send the final rendered output to the browser
* ------------------------------------------------------
*/
if ($EXT->_call_hook('display_override') === false) {
$OUT->_display();
}
/*
* ------------------------------------------------------
* Is there a "post_system" hook?
* ------------------------------------------------------
*/
$EXT->_call_hook('post_system');
/*
* ------------------------------------------------------
* Close the DB connection if one exists
* ------------------------------------------------------
*/
if (class_exists('CI_DB') and isset($CI->db)) {
$CI->db->close();
}
/* End of file CodeIgniter.php */
/* Location: ./system/core/CodeIgniter.php */
完整的Controller.php
<?php
if (!defined('BASEPATH')) {
exit('No direct script access allowed');
}
/**
* CodeIgniter.
*
* An open source application development framework for PHP 5.1.6 or newer
*
* @author ExpressionEngine Dev Team
* @copyright Copyright (c) 2008 - 2014, EllisLab, Inc.
* @license http://codeigniter.com/user_guide/license.html
*
* @link http://codeigniter.com
* @since Version 1.0
* @filesource
*/
// ------------------------------------------------------------------------
/**
* CodeIgniter Application Controller Class.
*
* This class object is the super class that every library in
* CodeIgniter will be assigned to.
*
* @category Libraries
*
* @author ExpressionEngine Dev Team
*
* @link http://codeigniter.com/user_guide/general/controllers.html
*/
class CI_Controller
{
private static $instance;
/**
* Constructor.
*/
public function __construct()
{
self::$instance = &$this;
// Assign all the class objects that were instantiated by the
// bootstrap file (CodeIgniter.php) to local class variables
// so that CI can run as one big super object.
foreach (is_loaded() as $var => $class) {
$this->$var = &load_class($class);
}
$this->load = &load_class('Loader', 'core');
$this->load->initialize();
log_message('debug', 'Controller Class Initialized');
}
public static function &get_instance()
{
return self::$instance;
}
}
// END Controller class
/* End of file Controller.php */
/* Location: ./system/core/Controller.php */
谢谢你的时间
答案 0 :(得分:2)
如果只是调用一个控制器类。你可以像这样写控制器。
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class YourControllerName extends CI_Controller {
}
答案 1 :(得分:0)
我遇到了这个问题,这个错误的实际原因是我的错误的数据库配置设置。这是一种误导性的错误信息。
修复 application/config
文件夹中的数据库配置设置为我解决了这个问题。
这个article很有用,它指出我要查看数据库配置文件。
答案 2 :(得分:0)
我遇到了同样的问题在/Codeigniter.php第234行找不到Ci_Controller 带有CI框架2.2.1版本。 1-我已经从github下载了相同的项目版本 2-我将所有控制器,模型,视图,资产从原始项目移至新下载的项目 不幸的是,然后它开始工作了,而没有知道问题的根源。