Принцип эникейщика

 Ошибка Infinite loop detected in JError. Каждый старается разобраться с ошибкой методом тыка. Причем все довольно сумбурно и непонятно, почему в одном случае срабатывает, а в другом нет. Попробуем разобраться. Сначала, что это означает. «Бесконечный цикл обнаруженный в JError». Возникает вопрос: а причем бесконечный цикл. Он возникает при попытке подключения к базе данных.

Причина: Когда JSite (наследник от JApplication) инициализируется, он пробует запустить  новый сеанс. А это требует записи в таблицу сессии #__session. При подключения к базе данных при некорректном или отсутствии параметра вызывается JError:: raiseError. Настройки по умолчанию JError указывают, что заданная по умолчанию обработка ошибок уровня это - E_ERROR, который вызывает callback (откат), который в конечном счете опять вызывает запрос JError:: customErrorPage. Он старается получить копию глобального объекта с JFactory:: getApplication, который приводит опять к тому же самому исключению, которое будет вызываться снова и снова, вызывая бесконечную проблему цикла. Довольно туманно, но что сделаешь, такая вот ситуация.

А теперь по-простому (можете верхний абзац не читать). Из обзора форумов при решении этого вопроса.

1.  В большинстве форумов предлагают такой вариант (удивился, но это тащится с одного ф. на другой ф. как единственное решение, Люди не присваивайте чужие решения, тем более ошибочные. Хочется показаться умным? Понимаю!) a. Зайти на ftp в папку libraries->joomla->filesystem b. Скачать файл folder.php на ваш компьютер (не забудьте сделать резервную копию этого файлы) с. Открыть файл folder.php редактором и найти строку $obd = ini_get(’open_basedir’) в. Закоментировать ее // $obd = ini_get(’open_basedir’) у. Сохранить изменения и закачать файл назад на сервер.

Комментарий: Помогает, все радуются, ставят плюсы, но это чисто отношения к нашему вопросу не имеет. Обязательно находится «один уродливый» и испуганно пишет «мне не помогло». Но его никто не слышит и не хочет слушать. И он один остается в глубоком раздумье «неуж я один такой тупой». Если ему не помогло, значит основная причина не в этом. Лучше не закомментить, а написать $obd = NULL с точки зрения прогера. Этот вариант тесно связан JFolder::create: Path not in open_basedir paths Warning! - Failed to move file Это связано с тем, что разработчики намеренно заблокировали возможность создания каталогов на серверах, где значение параметра ‘open_basedir’ не совпадает с корнем сайта. Зачем – у них спросите.

В таком случае вообще ничего не исправлять в folder.php. В настройках Apache для хоста или в php.ini установить -open_basedir "полный_путь_к_document_root:." - где установлена Joomla и точка. Так что файл folder.php - невиновен. 2.  Второй вариант. Предложение изменить тип configuration.php public $dbtype = 'mysqli';   на public $dbtype = 'mysql'; Опять публичный рев, ура, +500, и т.д. И опять находится возмутитель: «А у меня не работает, не помогло». А кому нужен он одиночка, который тупой. Ноль внимания. Крик в пустыне. Но проблема-то осталась, хотя бы для него одного. 3.  Следующий вариант. Настроить пути tmp, log. public $log_path = '/home/u119234/adsmirnyru/www/logs'; public $tmp_path = '/home/u119234/adsmirnyru/www/tmp'; Многим помогает, буря оваций и т.д И опять находится некто, несогласный с ними, но его уже никто не слышит. Проблема опять осталась нерешенной для него. 4.  И так куча вариантов, найденных методом тыка. И каждый прав в своей «находке». Такой мы народ, просто так нас не переубедишь. 5.  А вся беда заключается в configuration.php и только в нем. Строк много, остановимся только на некоторых: public $dbtype = 'mysqli'; какой на локалке такой и должен быть на хостинге public $host = '70.108.70.10'; поставьте свой public $user = 'u119234'; а это имя юзера public $password = 'v34cmAaK'; пароль юзера public $db = 'b119234'; имя базы данных public $dbprefix = 'jos_'; внимание, это префикс таблицы, хостер всегда меняет, если он ставят joomla public $log_path = путь к logs; public $tmp_path =путь к tmp; пишется полный путь в ‘’ одинарных

Совет: через свой хостинг «доберитесь» до своей базы данных MySQL, т.е. запустите phpMyAdmin. Он требует пользователя, пароля, имени базы данных. Если вы раскрыли базу данных - отлично. Вот эти данные проставьте в строки configuration.php. И еще проверьте, какой префикс. С путями надеюсь, понятно.

Обычно этого бывает достаточно, чтобы проблема исчезла. Если проверка «спотыкается» на одном из строк configuration.php при подключении к базе данных – идет прерывание и в «штопор», т.е в «бесконечный цикл» (читай, где «туманно»).

