Что-то явно не так в CodeIgniter. Столкнулся с серьезной проблемой, которую так и не могу побороть. Дело в XmlRPC, хотя я думаю, что в каких-то ситуациях дело не только в этой библиотеке. Скорее всего существует ошибка при подключении разных классов в основном контролере. То есть когда я в основном контролере передаю управление во вьювер, то в этом вьювере, при условии, что должен подключиться еще один класс (через new), начинают твориться странные вещи.
Я уже писал, что не смог перейти на 1.6.2 из-за того, что XmlRPC вдруг перестала видеть базу данных. Все попытки вручную её прописать, все равно не срабатывают - в основном контролере она есть и дальше, хоть тресни, не видно.
Сегодня столкнулся с аналогичной проблемой, только на другом хостинге. XmlRPC опять напрочь отказывается работать. И опять проблема с подключением классов. На сей раз вылезает ошибка:
Fatal error: Cannot redeclare class ci_session in /.../system/libraries/Session.php on line 0При этом если прописать библиотеку в автозагрузку, никакого эффекта. Поэтому пришлось отключить автозагрузку и прописать подключение библиотек вручную. При этом, что интересно, хотя в основном контролере все прописано, а в XmlRPC стоит и «parent::Controller();» и «$CI = & get_instance();» (и каких только вариантов я не перепробовал), все равно происходит какая-то ошибка и база опять отваливается.
Впрочем есть у меня предположение, что дело здесь вовсе не в CodeIgniter и моих кривых ручках, а самом хостинге. Проблема возникает на хостинге с PHP 4.4.8. На локальной машине и на другом хостинге, где стоит PHP 5.2 подобных проблем не наблюдается.
Комментариев: 7 RSS
1Wave28-05-2008 02:19
Максим, а вы проверяли на php5, работает ли то, из-за чего вы на 1.6.2 не переходите?
А на code-igniter.ru/forum/ - заглядываете? Там люди, которые с разработчиком игнитера общаются.
А поддержка четвёрки в игнитере сделана хаками, чтобы загрузка как раз работала. Вообще четвёрка - это атавизм. Хотя, понимаю, приходится и на четвёрке ещё иногда работать.
2JonNiBravo28-05-2008 05:08
Макс, может хрен с ним с этим PHP4, пора его уже выбросить на помойку, ты пишешь цмс нового поколения, зачем же пользоваться инструментами прошлого века
PS
Это уже третий коммент, я не знаю дошли ле прежние 2. что? попали на предмодерацию? ты хоть как то об этом сообщи чтобы я не беспокоился.
3Максим28-05-2008 08:41
Да, я извиняюсь, работает премодерация, и никакого сообщения не выводится. Пока не решил как его добавить.
По php4 я уже думал. Только что делать с теми, у кого такой хостинг. У меня например он до сих пор на одном из серверов. :(
4Sam28-05-2008 11:15
Если удастся локализовать ошибку — будет просто замечательно.
Какие именно условия?
Нет ли попытки испольнить другой контроллер второй раз?
5Максим28-05-2008 12:37
Не знаю... Пока ничего не получается, возможно есть какая-то особенность подключения классов, но я не понимаю в какую сторону рыть.
Интересный момент нашел.
В Base4.php &get_instance возвращается как global $CI. Но есть условие is_object. Так вот, если просто объявить в самом классе глабально $CI (без &get_instance), то чудесным образом появляются все поля этого объекта. Путем тыка обавил еще и is_array, работает лучше. Но все равно какие-то глюки с подключением остаются. Ну и в php5 данный способ не катит (только &get_instance).
В общем, я просто вынес функции добавления/редактирования в отдельный файл и подключаю его как обычно через require_once - все замечательно работает даже на 1.6.2. Придется оставить XMLRPC до лучших времен. Скоро выложу систему, может кто-то и подскажет куда рыть.
6Sam28-05-2008 14:56
Хорошо. Но если будет время разобраться — попытайся примерно локализовать проблему, чтобы зарепортить багу. В Ellislabs разберутся…
7Sam30-05-2008 11:39
Неофициальная curl-либа:
http://alexpolski.com/2008/05/14/bugfixes-in-curl-library-for-codeigniter/