CodeIgniter &get_instance() 在 php5.6 版本中不起作用?
Posted
技术标签:
【中文标题】CodeIgniter &get_instance() 在 php5.6 版本中不起作用?【英文标题】:CodeIgniter &get_instance() not working in php5.6 version? 【发布时间】:2017-10-29 16:33:03 【问题描述】:我的 codeigniter 站点在 php5.4 版本中正常运行,但是当我将我的 php 版本升级到 php5.6.30 时它无法正常工作。
function &get_instance()
return CI_Controller::get_instance();
上面的函数在我文件的第 233 行,它返回空值。
错误 - 致命错误:在第 233 行的 Coginiter_site\system\core\CodeIgniter.php 中找不到类“CI_Controller”
我已经追踪了错误点—— system/core/common.php
下的代码if ( ! function_exists('load_class'))
function &load_class($class, $directory = 'libraries', $prefix = 'CI_')
static $_classes = array();
// Does the class exist? If so, we're done...
if (isset($_classes[$class]))
return $_classes[$class];
$name = FALSE;
// Look for the class first in the local application/libraries folder
// then in the native system/libraries folder
foreach (array(APPPATH, BASEPATH) as $path)
if (file_exists($path.$directory.'/'.$class.'.php'))
$name = $prefix.$class;
if (class_exists($name) === FALSE)
require($path.$directory.'/'.$class.'.php');
break;
// Is the request a class extension? If so we load it too
if (file_exists(APPPATH.$directory.'/'.config_item('subclass_prefix').$class.'.php'))
$name = config_item('subclass_prefix').$class;
if (class_exists($name) === FALSE)
require(APPPATH.$directory.'/'.config_item('subclass_prefix').$class.'.php');
// Did we find the class?
if ($name === FALSE)
// Note: We use exit() rather then show_error() in order to avoid a
// self-referencing loop with the Excptions class
exit('Unable to locate the specified class: '.$class.'.php');
// Keep track of what we just loaded
is_loaded($class);
$_classes[$class] = new $name();
return $_classes[$class];
返回空结果 这行创建了一个问题 $_classes[$class] = new $name(); 请检查一下。
【问题讨论】:
CodeIgniter: Class 'CI_Controller' not found的可能重复 我认为你的系统文件问题我在第 361 行有这个功能。所以首先你备份你的文件夹并下载新的 codeigniter 并替换系统文件夹可能会解决你的问题 你能把你使用&get_instance()函数的代码放上来 $this->CI =& get_instance();在助手和核心文件夹中 你替换新的系统文件夹? 【参考方案1】:你能关注第一个solution吗?希望它能解决您的问题。
【讨论】:
我的问题与加载视图无关……是的,它与“致命错误:在 path\to\system\core\CodeIgniter 中找不到类'CI_Controller'有关。 php on line 231" ......我也做了这个解决方案......但我认为 $ci =& get_instance();这里仍然为空。【参考方案2】:您可以尝试使用this,在CodeIgniter.php 第 75 行进行更改
set_error_handler('_exception_handler');
到
set_exception_handler('_exception_handler');
更新:
如果这不起作用,也许你可以检查一下其他的东西:
-
检查是否是数据库错误(这很奇怪,但有时是数据库错误
显示为 'CI_Controller not found',例如,有一个坏 db
姓名)。
检查是否更改:
$config['log_threshold'] = 0;
有效
给你
重新安装整个 CI 框架系统文件夹。
Here和here有同样的问题,你可以检查所有的答案。
如果这些都不起作用,请尝试将一些代码和上下文发布到您的控制器。
希望对你有帮助!
【讨论】:
是的,我这样做了,我很清楚 (& get_instance();) 被赋予 null... 在核心文件夹下的文件名为 MY_Controller.php以上是关于CodeIgniter &get_instance() 在 php5.6 版本中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
CI-CodeIgniter中“超级对象”:$CI =& get_instance()
CodeIgniter:My_Lang 中的 get_instance
使用 get_instance() 时自动完成 Codeigniter
text CodeIgniter - 何时使用get_instance()