Странная Ошибка При Использовании Behaviors В Модели

Есть у меня простая модель в проекте, в которой используются два поведения:




class XModel extends CActiveRecord {

    ...

    public function behaviors(){

        return array(

            'CAdvancedArBehavior' => array('class' => 'application.extensions.CAdvancedArBehavior'),

            'ERememberFiltersBehavior' => array('class' => 'application.extensions.ERememberFiltersBehavior')

        );

    }

    ...

}



Все работало отлично, пока не переехали на другой хостинг. После переезда в error-логе апача начали появляться сотни таких ошибок:




PHP Warning:  include(ERememberFiltersBehavior.php): failed to open stream: No such file or directory in /var/www/podster.fm/www/htdocs/framework/yiilite.php on line 244


PHP Warning:  include(): Failed opening 'ERememberFiltersBehavior.php' for inclusion (include_path='.:/var/www/podster.fm/www/htdocs/application/modules/blog/models:/var/www/htdocs/application/vendors:

/var/www/htdocs/application/components/auth:/var/www/htdocs/application/components:/var/www/htdocs/application/models:/usr/share/pear:/usr/share/php') in /var/www/htdocs/framework/yiilite.php on line 244



точно такая же ошибка и для второго поведения этой модели.

Пробовал в имени класса заменить "application.extensions." на "ext." не помогает.

Визуально сайт работает как надо, не падает. Видимо, эта ошибка проявляется только для каких-то определенных пользователей… я грешу на настройки хостинга, но что с ним не так не понятно :(

На прежнем хостинге был Debian Squeeze, PHP 5.3.27-1~dotdeb.0, Suhosin v0.9.33

и такой ошибки не наблюдалось.

На локальной машине под Zend Server ошибок также нет.

А вот на новом хостинге есть. Centos 6.4, PHP 5.3.3, Suhosin v0.9.29

Конфиги и модули одни и те же.

Может есть какие-то идеи почему возникает ошибка?

Есть подозрения на регистрозависимость.

Проверьте регистр букв в названии файла в файловой системе, название поведения и имя класса поведения.

Это я тоже проверил… проблема в чем-то другом

Имена файлов в папке extensions:

CAdvancedArBehavior.php

ERememberFiltersBehavior.php

Названия классов совпадают с файлами:




class CAdvancedArBehavior extends CActiveRecordBehavior {

 ...

}


class ERememberFiltersBehavior extends CActiveRecordBehavior {

 ...

}



Solved!

Проблема оказалась не в поведениях как таковых.

Обращения к модели XModel, осуществлялись из контролера.

Но не простого, а использующего кеширование COutputCache




public function filters()

{

    return array(

        array(

            'COutputCache + view',

            'duration'=> 900,

            'varyByParam'=>array('slug','context'),

            'varyByLanguage'=>true,

         ),

    );

}



Так вот, когда содержимое доставалось из кеша происходила ошибка.

Ошибка при вызове unserialize. При десериализации объекта PHP не мог найти соответствующий файл…

Подобная проблема описана тут http://www.yiiframework.ru/forum/viewtopic.php?f=6&t=3636

Мое решение такое.

При подключении поведения в модели я убрал все префиксы перед именем класса:

было ‘class’ => ‘application.extensions.CAdvancedArBehavior’),

стало ‘class’ => ‘CAdvancedArBehavior’),

а в конфиг добавил

‘import’=>array(

'application.extensions.*',


....

),

и все заработало как надо! :)