2012-01-16 3 views
2

Так в основном, ниже код я прямо сейчас:CodeIgniter CI_Controller не найден

class MY_Log extends CI_Log { 

    /** 
    * Variable storing the CodeIgniter instance. 
    * 
    * @access private 
    * @since v0.1.0.0 
    */ 
    private $CI; 

    /** 
    * Constructor for later use by internal 
    * methods. 
    * 
    * @access public 
    * @since v0.1.0.0 
    */ 
    public function __construct() 
    { 
     // Extend the parent logging. 
     parent::__construct(); 

     $this->$CI =& get_instance(); 
    } 
} 

И я получаю следующее сообщение об ошибке;

Fatal error: Class 'CI_Controller' not found in /<deleted>/system/core/CodeIgniter.php on line 233 

Это как описано в руководстве пользователя.

+0

Есть ли файл system/core/Controller.php в вашей файловой системе? – dakdad

+0

Да и строка 233: return CI_Controller :: get_instance(); – Roel

+0

Возможный дубликат [CodeIgniter: Class 'CI_Controller' не найден] (http://stackoverflow.com/questions/6758681/codeigniter-class-ci-controller-not-found) – cweiske

ответ

3

Довольно странно. Я только что воспроизвел ваше дело (с предоставленной информацией), и у меня не было никаких проблем. Но убедитесь, что пара вещей:

  1. Ваш файл называется MY_Log.php, и расположен в application/libraries/My_log.php
  2. Файл расширяет родительский класс, в этом случае CI_Log
  3. Вы вызываете библиотеку ваш контроллер как

    $this->load->library('log'); 
    $this->log->do_something(); 
    

    т. е. не использовать «My_log», но имя родительской библиотеки. На самом деле, вы расширения его, не создавая другую, так что CI хочет, чтобы назвать это то же самое, что и оригинальный

  4. исходный файл имеет следующую строку правильно написанное (без знака $ до CI)

    $this->CI =& get_instance(); 
    

Мой тест с кодом при условии, отлично работает на моем компьютере для разработки (Windows 7 WAMP PHP 5.3.8). Я буду ждать больше информации.

+0

1. Верно. 2. Исправить. 3. Действительно, делая это. 4. Если бы это было неправильно, но не исправить проблему. Это происходит не так, как только я превращаю log_treshold в 1. – Roel

+0

Uhm ... Какую версию CI вы используете? это новая установка? вы что-то изменили в конфигурации? Можете ли вы воспроизвести проблему с новой копией CI? –

+0

Я изменил много вещей в конфиге, но только значения и параметры по умолчанию. base_url, index_page, url_suffix, encryption_key, sess_cookie_name и включен global_xss_filtering. Вот и все. Позвольте мне попробовать с новой установкой. – Roel

0

Попробуйте положить это в верхней части MY_Log.php, если вы еще не:

< PHP определен («BasePath») OR выхода («Нет прямой доступ сценария не разрешено»);

Возможно, ваш класс MY_Log на самом деле не обрабатывается php, если он не включен в разделители php. Если это так, тогда CI увидит файл MY_Log.php и ожидает, что CI_Log будет расширен классом, объявленным в MY_Log.php. Но если ваш класс не находится в ограничителях PHP, CI_Log на самом деле не будет расширен, что может вызвать нечетные ошибки.

3

Я предполагаю, что эта ошибка возникает, когда функция библиотеки журналов вызывается до загрузки класса CI_Controller. Это может произойти на ранней стадии вашей прикладной программы. Поэтому вы должны расширить библиотеку журналов, не используя $this->$CI =& get_instance();.

0

В случае, если это кому-то поможет, у меня была такая же проблема, и я заметил, что это произошло только по URL-адресам, содержащим в них +, например. как часть постоянной ссылки. CI пошел на сено; Я не допустил появления знаков + в URL-адресах, и все было хорошо.

Смежные вопросы