После выполнения инструкций, приведенных здесь: http://ellislab.com/codeigniter/user-guide/general/cli.html Я не могу запустить тестовый скрипт через командную строку.
Мой контроллер находится в / var / www / mysite / application / controller /
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 tools message "Ben"
Мой терминал должен печатать: «Hello Ben»
Однако я получаю следующую ошибку:
PHP Неустранимая ошибка: класс 'CI_Controller' не найден в /var/www/mysite/system/core/CodeIgniter.php в строке 233
Мой сервер довольно стандартный; ubuntu LAMP. Codeigniter тоже довольно стандартный, и у меня нет проблем с запуском не CI-скриптов через командную строку
Мой двоичный файл PHP находится только в / usr / bin / php <- Этот пост предлагает проблему с запуском CI непосредственно из usr / bin / php, однако я не использую общий PHP-сервис, и я не понимаю, почему это повлияет на то, как PHP выполняет скрипт CI.
Любая помощь или просто указание о том, как отладить это, будут очень признательны.
Заранее спасибо.
Решено! (отчасти) проблема заключалась в регистрации ошибок CodeIgniters.
В application / config / config.php я изменил следующее свойство config:
$config['log_threshold'] = 0;
Это отключает ведение журнала и позволяет выполнить $ php index.php
.
Если кто-нибудь может объяснить, почему CI только показывает эту ошибку в CLI PHP, может помочь кому-то еще, кто имеет эту проблему, и нуждается в ее разрешении при регистрации ошибок.
Чтобы решить ошибку «Class» CI_Controller «не найден», попробуйте перейти к Application -> Config -> database.php
затем проверьте имя базы данных.
Михану:
У меня была такая же проблема, и примерно через два часа отслеживания кода, чтобы выяснить проблему, кажется, что существует некоторый конфликт с загрузкой CI_Controller при использовании собственной функции PHP load_class.
Я работал над этой проблемой, внося следующие изменения в файл Common.php (взломать, я знаю).
//$_log =& load_class('Log'); require_once('system/libraries/Log.php'); $_log = new CI_Log();
Мои журналы тогда создавались точно так, как я хотел. Надеюсь, этот хак поможет.
Этот сайт говорит, что для запуска codeigniter из командной строки необходимо установить переменную $ _SERVER ['PATH_INFO'].
$ _SERVER ['PATH_INFO'] обычно предоставляется php при создании веб-запроса. Однако, поскольку мы вызываем этот скрипт из командной строки, нам нужно эмулировать эту небольшую часть среды как веб-запрос.
Ответ, предоставленный в этом столбце «Переполнение стека», работал для меня.
Внутри system/core/CodeIgniter.php
по строке 75 измените:
set_error_handler('_exception_handler');
чтобы …
set_exception_handler('_exception_handler');
Другие пользователи сообщили, что это дало им лучшую обратную связь, с помощью которой можно было отладить основную проблему, но для меня это фактически полностью устранило проблему.