Разрабатывал я тут одну штуку на CodeIgniter. Сам фреймворк показался мне очень удобным, так что я планирую подробнее описать его подробнее.
На локальном Денвере все работало отлично. Однако после загрузки приложения на хостинг нарисовалась проблема: возникла ошибка Message: Undefined property: Search::$projects - на ровном, казалось бы, месте.
Проанализировав код, я пришел к выводу, что вызов:
отрабатывает некорректно. Мне удалось исправить эту ошибку, поместив вызов требуемых моделей, а также библиотек, хелперов и плагинов в конструктор класса, для чего этот конструктор пришлось создать:
Однако это решение мне не понравилось. Во-первых, так быть не должно, потому что в документации на CodeIgniter совершенно недвусмысленно сказано, что "Your models will typically be loaded and called from within your controller functions." - то есть без указания на объявление в конструкторе.
Во-вторых же, эта мера все равно оказалась недостаточной. В проекте использовалась библиотека SimplePie, которая также отказалась работать, выдавая следующую ошибку: Fatal error: Trying to clone an uncloneable object of class.
В конечном итоге, ларчик открывался просто.
У PHP5 есть такая конфигурационная опция - zend.ze1_compatibility_mode. При включении этой опции объекты передаются по значению, а не по ссылке, - то есть так, как принято в Zend 1, он же движок PHP4. Соответственно, эта опция влияет на клонирование объектов.
Поскольку доступа к php.ini у меня не было, пришлось воспользоваться директивой:
в .htaccess. Все заработало сразц и именно так, как ожидалось.
Опция эта, к слову, выключена в установке php по умолчанию, и ни разу мне до этого не встречалась. На конкретном сервере она включена была по требованию предыдущего программиста, который использовал самописный фреймворк, реализованный, конечно, на 4 версии PHP, но с широким использованиемнедоделанной объектной модели четвертой версии.
Такие бывают аномалии.

На локальном Денвере все работало отлично. Однако после загрузки приложения на хостинг нарисовалась проблема: возникла ошибка Message: Undefined property: Search::$projects - на ровном, казалось бы, месте.
Проанализировав код, я пришел к выводу, что вызов:
$this->load->model('feeds');
отрабатывает некорректно. Мне удалось исправить эту ошибку, поместив вызов требуемых моделей, а также библиотек, хелперов и плагинов в конструктор класса, для чего этот конструктор пришлось создать:
class Feeds extends Controller {
function Controller(){
parent::Controller();
$this->load->model('feeds');
}
..
}
Однако это решение мне не понравилось. Во-первых, так быть не должно, потому что в документации на CodeIgniter совершенно недвусмысленно сказано, что "Your models will typically be loaded and called from within your controller functions." - то есть без указания на объявление в конструкторе.
Во-вторых же, эта мера все равно оказалась недостаточной. В проекте использовалась библиотека SimplePie, которая также отказалась работать, выдавая следующую ошибку: Fatal error: Trying to clone an uncloneable object of class.
В конечном итоге, ларчик открывался просто.
У PHP5 есть такая конфигурационная опция - zend.ze1_compatibility_mode. При включении этой опции объекты передаются по значению, а не по ссылке, - то есть так, как принято в Zend 1, он же движок PHP4. Соответственно, эта опция влияет на клонирование объектов.
Поскольку доступа к php.ini у меня не было, пришлось воспользоваться директивой:
php_flag zend.ze1_compatibility_mode off
в .htaccess. Все заработало сразц и именно так, как ожидалось.
Опция эта, к слову, выключена в установке php по умолчанию, и ни разу мне до этого не встречалась. На конкретном сервере она включена была по требованию предыдущего программиста, который использовал самописный фреймворк, реализованный, конечно, на 4 версии PHP, но с широким использованием
Такие бывают аномалии.

Александр, спасибо большое! Спасли меня от бессонной ночи.
ОтветитьУдалитьРад был помочь.
ОтветитьУдалить