Ошибка 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 при подключении к базе данных – идет прерывание и в «штопор», т.е в «бесконечный цикл» (читай, где «туманно»).