按照此处的用户指南说明操作后: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工具消息“Ben”
我的终端应该打印:“Hello Ben”
但是我收到以下错误:
PHP致命错误:第233行的/var/www/mysite/system/core/CodeIgniter.php中找不到“CI_Controller”类
我的服务器很标准; ubuntu LAMP。 Codeigniter也非常标准,我通过命令行运行非CI脚本没有问题
我的PHP二进制文件只位于/ usr / bin / php< - This post表示直接从usr / bin / php运行CI的问题,但是我没有运行共享的PHP服务,我不明白为什么这会对PHP执行CI脚本的方式产生影响。
非常感谢任何帮助或只是指示如何调试它。
提前致谢。
答案 0 :(得分:12)
解决! (部分)问题是CodeIgniters错误记录。
在application / config / config.php中,我修改了以下配置属性:
$config['log_threshold'] = 0;
这会禁用日志记录,并允许$ php index.php
执行。
如果有人能够解释为什么CI仅在CLI上显示此错误 - 可能会帮助其他任何有此问题且需要解决错误登录的人。
答案 1 :(得分:6)
要解决错误“未找到类'CI_Controller'”尝试转到Application -> Config -> database.php
然后检查数据库详细信息,例如主机名,用户名,密码和数据库。
答案 2 :(得分:2)
致Mijahn:
我遇到了同样的问题,经过大约两个小时的代码跟踪来找出问题之后,在使用本机PHP load_class函数时加载CI_Controller似乎存在某种冲突。
我通过对Common.php文件进行以下更改(hack,我知道)解决了这个问题。
//$_log =& load_class('Log');
require_once('system/libraries/Log.php');
$_log = new CI_Log();
然后我的日志就像我想要的那样创建。希望这个黑客有所帮助。
答案 3 :(得分:0)
这个site表示要从命令行运行codeigniter,必须设置$ _SERVER ['PATH_INFO']变量。
$ _ SERVER ['PATH_INFO']通常在发出Web请求时由php提供。但是,由于我们从命令行调用此脚本,因此我们需要将此环境的这一小部分模拟为Web请求。
答案 4 :(得分:0)
this Stack Overflow post中提供的答案对我有用。
在system/core/CodeIgniter.php
内,在第75行附近,更改:
set_error_handler('_exception_handler');
为...
set_exception_handler('_exception_handler');
其他用户报告说这给了他们一个更好的回溯来调试底层问题,但对我来说,这实际上完全消除了这个问题。