【问题标题】:CodeIgniter not able to instantiate controller classCodeIgniter 无法实例化控制器类
【发布时间】:2021-03-23 12:51:11
【问题描述】:

所以我正在尝试解决为什么 CodeIgniter 不会显示任何输出(404 等除外)。我检查了从 php 和 apache 和 codeigniter 中的错误记录到模块重写的所有内容。一切似乎都配置得很好。

我开始深入研究 CodeIgniter 核心文件,并注意到它在下面试图实例化请求的控制器类的行上崩溃了:

        $class  = $RTR->fetch_class();
        $method = $RTR->fetch_method();

echo 'looking for class: ' . $class . '<br/>';
if(class_exists($class) == false) {

                )
        {
                echo 'class does not exist: ' . $class;
                show_404("{$class}/{$method}");
        }
}

/*
 * ------------------------------------------------------
 *  Is there a "pre_controller" hook?
 * ------------------------------------------------------
 */
        $EXT->_call_hook('pre_controller');
echo '<br/>after precontroller';
/*
 * ------------------------------------------------------
 *  Instantiate the requested controller
 * ------------------------------------------------------
 */
        // Mark a start point so we can benchmark the controller
        $BM->mark('controller_execution_time_( '.$class.' / '.$method.' )_start');

echo '<br/>before class init: ' . $class;
        $CI = new $class();
echo '<br/>after class init';

这在 /core/CodeIgniter.php 文件中。这是输出:

CodeIgniter.php
looking for class: servicecontroller

after precontroller
before class init: servicecontroller

基本上它告诉我它可以找到 servicecontroller 类,但是当它尝试实例化它时,它崩溃了。 php 错误日志记录已启用,并且 display_errors 已打开。如果我在这里附近的任何地方强制一个 php 错误,我会在页面上看到它,但不是这个。有谁知道为什么它不能越过这条线?

servicecontroller.php 是这样排列的:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class servicecontroller extends CI_Controller {
}

【问题讨论】:

  • 尝试将你的类改为class Servicecontroller extends CI_Controller ...文档中明确提到类名必须以大写字母开头,小写字母无效。
  • 嗯...似乎什么也没做:-\

标签: codeigniter


【解决方案1】:

好的,这个问题的根源是使用 mysql_connect 连接到数据库时出错。由于某种原因,它不会产生任何错误,“or die(”error...”); 也不会做任何事情。这是因为我们在服务器上使用的是 php 5.4,并且似乎不再支持 mysql_connect , 除非你安装了 mysqlnd。解决方法是将我们的数据库驱动程序切换到 'mysqli', CodeIgniter 幸运的是有一个驱动程序, 然后安装 php5-mysql : apt-get install php5-mysql 希望这对其他人有帮助。

【讨论】:

    【解决方案2】:

    我的问题已经解决了。

    打开你的:config/database.php

    查找:$db['default']['dbdriver'] = 'mysqli'; 将其替换为:$db['default']['dbdriver'] = 'mysql';

    或者,在 PHP 中启用“mysqli”扩展。

    【讨论】:

      【解决方案3】:

      在核心 system 文件夹中无事可做。

      1. 将系统文件夹更新到最新的
      2. 检查 index.php 文件夹中的 .htaccess 文件
      3. 检查您的 config/route.php 文件
      4. 如果在主机检查 mod_rewrite apache 模块已启用

      【讨论】:

        【解决方案4】:

        我在使用 Expression Engine 时遇到了这个问题,问题是数据库连接——我使用的是 Vagrant,所以我必须在数据库配置文件中设置端口,然后它才能工作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-24
          • 2014-11-07
          • 1970-01-01
          • 2023-03-08
          • 2019-07-01
          • 2020-05-27
          相关资源
          最近更新 更多