【问题标题】:Codeigniter Command line error - PHP Fatal error: Class 'CI_Controller' not foundCodeigniter 命令行错误 - PHP 致命错误:找不到类“CI_Controller”
【发布时间】:2013-02-18 22:01:27
【问题描述】:

按照此处找到的用户指南说明进行操作后:http://ellislab.com/codeigniter/user-guide/general/cli.html 我无法通过命令行运行测试脚本。

我的控制器位于 /var/www/mysite/application/controllers/

    class Tools extends CI_Controller {

    public function message($to = 'World')
    {
        echo "Hello {$to}!".PHP_EOL;
    }
}

在我的浏览器中我可以访问

http://mysite/tools/message/ben

并且函数正确输出“Hello ben”

从终端我应该能够运行:

$ php index.php 工具消息“本”

我的终端应该打印:“Hello Ben”

但是我得到以下错误:

PHP 致命错误:在第 233 行的 /var/www/mysite/system/core/CodeIgniter.php 中找不到类“CI_Controller”

我的服务器很标准; Ubuntu 灯。 Codeigniter 也很标准,我通过命令行运行非 CI 脚本没有问题

我的 PHP 二进制文件仅位于 /usr/bin/php This post 建议直接从 usr/bin/php 运行 CI 时出现问题,但是我没有运行共享的 PHP 服务,而且我没有不明白为什么这会对 PHP 执行 CI 脚本的方式产生影响。

任何帮助或只是关于如何调试的指示将不胜感激。

提前致谢。

【问题讨论】:

  • 我认为您正在从 /var/www/mysite/ 运行脚本?
  • 是的,否则我会立即收到“无法打开输入文件”错误。

标签: php codeigniter command-line


【解决方案1】:

要解决“找不到类 'CI_Controller'”错误,请尝试转到 Application -> Config -> database.php,然后检查数据库详细信息,例如 主机名用户名密码 em> 和 数据库

【讨论】:

  • 我了解,您还没有足够的声誉来发布 cmets,但这个答案看起来真的很像。尝试在其中添加更多细节。
  • @sanjeev goel 你为我们指明了正确的方向,但我需要一个小时来理解和弄清楚整个事情。在我的情况下,问题是由于 CI 的 db 驱动程序造成的,因为本地服务器上的数据库已被团队开发人员删除,所以 CI 给出了这个错误。但显然 CI 的错误是不可理解的。
  • 对.. 见配置数据库。数据库名称、用户名和密码必须匹配。
  • 您好,这是真的,请检查您是否拥有正确的数据库、正确的用户名和密码,如果所有这些都正确,那么您可以尝试导出您的数据库,删除现有数据库并创建另一个数据库然后将您的数据库导入回来,如果您在数据库中更改了名称,请记住在 database.php 中更改名称
【解决方案2】:

this Stack Overflow post 中提供的答案对我有用。

system/core/CodeIgniter.php 内,大约在第 75 行,更改:

set_error_handler('_exception_handler');

到...

set_exception_handler('_exception_handler');

其他用户报告说,这为他们提供了更好的回溯来调试潜在问题,但对我来说,这实际上完全消除了问题。

【讨论】:

    【解决方案3】:

    致米扬:

    我也遇到了同样的问题,经过大约两个小时的代码跟踪找出问题后,似乎在使用原生 PHP load_class 函数时加载 CI_Controller 存在某种冲突。

    我通过对 Common.php 文件进行以下更改来解决此问题(我知道是 hack)。

    //$_log =& load_class('Log');
    require_once('system/libraries/Log.php');
    $_log = new CI_Log();
    

    然后我的日志完全按照我想要的方式创建。希望这个 hack 有所帮助。

    【讨论】:

    • 对我来说这不是 Log 类的问题,而是 Common.php 中的异常处理程序所以我不得不相应地更改 Exceptions 类的加载:// $_error =& load_class('Exceptions', 'core'); require_once('system/core/Exceptions.php'); $_error = new CI_Exceptions('core');
    【解决方案4】:

    解决了! (部分)问题是 CodeIgniters 错误记录。

    在 application/config/config.php 中,我修改了以下配置属性:

    $config['log_threshold'] = 0;
    

    这将禁用日志记录,并允许$ php index.php 执行。

    如果有人能解释为什么 CI 只在 CLI PHP 上显示此错误 - 可能会帮助遇到此问题并需要通过错误登录解决此问题的任何其他人。

    【讨论】:

      【解决方案5】:

      site 说要从命令行运行 codeigniter,必须设置 $_SERVER['PATH_INFO'] 变量。

      $_SERVER['PATH_INFO'] 通常由 php 在发出 Web 请求时提供。然而,由于我们是从命令行调用这个脚本,我们需要将环境的这一小部分模拟为一个 Web 请求。

      【讨论】:

      • 谢谢,在链接中它使用 CI 应用程序文件夹之外的 PHP 文档,并通过包含 index.php 加载 CI。我需要在我的应用程序中的 CI 控制器上运行命令。我确实更改了我的 $config['uri_protocol'] = "PATH_INFO",但仍然有同样的问题。
      猜你喜欢
      • 2013-11-04
      • 2012-12-08
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      • 2015-03-20
      • 2015-07-01
      相关资源
      最近更新 更多