call to undefined method japplicationadministrator isclient

При обновлении Joomla до версии 3.8 администраторы сайтов иногда сталкиваются с ошибкой — Call to undefined method JApplicationSite::isClient. Причем ошибка не пропадает даже при восстановлении сайта из резервной копии, но давайте по порядку.

К нам обратился заказчик и сообщил, что после обновления до версии 3.8 видит, пустую страницу (белый экран). Поскольку пустая страница является признаком фатальной ошибки, устанавливаем сообщение об ошибках в файле configuration.php на «максимум», и обновляем страницу лицевой части сайта, где видим:

Fatal error: Call to undefined method JApplicationSite::isClient() in /home/[cpanel-user]/public_html/plugins/system/languagefilter/languagefilter.php on line 94

Админ панель отображала следующую ошибку:

Fatal error: Call to undefined method JApplicationAdministrator::isClient() in /home/[cpanel-user]/public_html/plugins/system/languagefilter/languagefilter.php on line 94

Примечание. Включение отладки отображало следующую ошибку на сервере и сайте Joomla: Неустранимая ошибка: вызов неопределенного метода JProfiler :: setStart () в / home / [cpanel-user] / public_html / administrator / index. php в строке 45

Если вы внимательно посмотрите на приведенные выше ошибки, вы заметите, что проблема заключается в том, что не загружаются 2 основных класса Joomla, JApplicationSite и JApplicationAdministrator . Но почему?

Были проверены все файлы, которые использовались для загрузки основных классов или поддержки загрузки основных классов, в частности, следующих двух файлов:

Файл loader.php, который находится в папке library / cms / class / .

Файл ClassLoader.php, который находится в папке library / vendor / composer .

Сайт работал на версии PHP 5.4, и поэтому мы переключились на 5.6, а затем на 7.0, а затем на 7.1. Ошибка сохранялась.

Чтобы исключить ошибки хостинга, сайт был перенесен на локальный сервер, где он точно также выдавал «белый экран».

Подобная ошибка возникала несколько лет назад, при обновлении версии 3.1.1 ошибка была вызвана загрузкой старых файлов library Joomla вместо новых. Итак, мы переименовали папку существующих library в library_old , и скопировали новую копию папки library на сайт … и сайт заработал

Итак, проблема была вызвана неправильным файлом библиотеки, но каким из них? Мы сделали список файлов и сравнили с нерабочим сайтом.

Как оказалось, некоторые файлы были подключены по неверным путям.

Например, файл factory.php был включен из папки library / joomla вместо папки library / src . Было также много файлов, включенных в папку library / cms , и эти файлы были включены из папок, которые больше не должны существовать в папке library / cms . Фактически, папка библиотек / cms в Joomla 3.8 содержит только 3 папки (Joomla 3.7.5 имеет 30 папок внутри папки библиотек / cms ).

Вероятно, заказчик либо обновил сайт вручную (например, перезаписав файлы из новой установки Joomla), либо клиент обновил сайт через админ панель, но со старого сервера обновлений Joomla, где процесс обновления не включает удаление старых библиотечные файлы / папки.

В любом случае стоит признать, что это проблема разработчиков Joomla, которая должна учитывать любой вариант обновления. Поскольку разработчики указывают что — «разница с 3.7.5 весьма незначительна», а на деле в структуре файлов в Joomla 3.8 происходит огромное изменение.

Восстановление сайта из резервной копии вернее всего не приносит результата, поскольку файлы из резервной копии перезаписываются поверх существующих. При данной ошибке сначала нужно удалить все файлы из директории сайта, а после чего «откатиться».

Подводя итоги.

Избавиться от ошибки можно двумя способами.

Первый

Итак, если вы видите ошибку Call of undefined JApplicationSite :: isClient () на своем веб-сайте Joomla, попробуйте переименовать папку библиотек в library_old, а затем скопируйте папку library из новой установки Joomla 3.8.

Второй

Загрузите, с заменой файлов ту версию Joomla, на которой сайт работал, а потом через админ панель сделайте обновление, обновление может проходить в несколько этапов. После каждого удачного обновления делайте резервную копию и проверяйте ошибки базы, при необходимости делайте исправления

Joomla 3.8 выдаёт ошибку Call to undefined method JApplicationSite::isClient()

Пятница, 06 Июль 2018 23:10

При клонировании Joomla 3.8.8 или 3.8.10 появилась ошибка:

Для разных версий может быть ошибка в строке 44, 48, 49 или других. Это не суть важно.

Самое удивительное в этой ситуации, что исходный сайт работал и работает, а клон отказывается запускаться!

Как всегда и бывает в подобных ситуациях, поиск в сети не дал никаких результатов. Только витиеватые советы запускать какие-то самописные скрипты, в том числе online (расположенные на чужом сервере)! Просто за гранью абсурда.

Неужели опять спасать себя самому?

Первые подозрения пали на конфигурацию хостинга и на версию PHP. Поэтому на разных VDS были испробованы все разумные варианты: PHP 5.6.35, PHP 5.6.36, PHP 7.0.10, PHP 7.2.6. Но это никак не повлияло на результат.

Пришлось разбираться уже досконально. В результате детального анализа появилась гипотеза, что Джумла подгружает некоторые файлы ядра «не оттуда». Например, factory.php был подключен из libraries/joomla в то время как должен был бы из libraries/src . Редактирование на скорую руку показало, что таких файлов больше трёх. Дальше я копаться не стал.

В результате было решено вручную заменить файлы ядра Джумлы, которые располагаются в директории /libraries. Пришлось переименовать старую /libraries в /libraries.old. Затем с официального сайта был скачан полный архив с актуальной версией Joomla в формате zip, и вот уже из него скопирована /libraries. О, да. Так заработало!

Выводы

С версии 3.7.5 движок Joomla может обновляться некорректно: не удаляются старые версии файлов. Увы, это приводит к тому, что старые файлы могут подгружаться во время работы сайта. На данный момент проблема решается на уровне переместить/копировать директорию.

A new client approached us yesterday and told us that they were seeing a blank page on the frontend and on the backend of their Joomla website after updating it to 3.8.0. Since a blank page is a sign of a fatal error, we set the error reporting on the client’s site to “maximum” in the configuration.php file, and then checked the frontend of the website, which was displaying the following:

Fatal error: Call to undefined method JApplicationSite::isClient() in /home/[cpanel-user]/public_html/plugins/system/languagefilter/languagefilter.php on line 94

The backend of the website was displaying the following error:

Fatal error: Call to undefined method JApplicationAdministrator::isClient() in /home/[cpanel-user]/public_html/plugins/system/languagefilter/languagefilter.php on line 94

(Note: Enabling debugging displayed the following error on the backend and on the fronted of the Joomla website: Fatal error: Call to undefined method JProfiler::setStart() in /home/[cpanel-user]/public_html/administrator/index.php on line 45)

If you look closely at the above errors, you will notice that the problem is that 2 basic Joomla classes, JApplicationSite and JApplicationAdministrator, are not being loaded. But why?

We investigated the problem very thoroughly. We looked at all the files that were used to load core classes or support the loading of core classes, notably, the following 2 files:

  • The file loader.php which is located under the libraries/cms/class/ folder.
  • The file ClassLoader.php which is located under the libraries/vendor/composer folder.

We couldn’t find anything.

We then thought it could be a problem with the PHP version that the client was using, which was PHP 5.4, and so we switched to 5.6, and then 7.0, and then 7.1. None worked!

We then started thinking about the hosting environment, could it be? Well, the client was using GoDaddy, which should cause any decent developer to become a bit skeptical at the very least (in fact, we could just blame GoDaddy for the heat wave we’re having right now in Montreal and everyone would believe us!). So, we copied the website over to one of our servers, and we tested it there. Same exact problem!

Eventually, we decided to copy a fresh copy of Joomla 3.8 onto the website. So, we downloaded Joomla 3.8, we then removed the images and the templates folder from the downloaded zip file, we extracted the zip file onto the website, and we tried loading the website, still, the same error.

Then it suddenly hit us, what if the problem is similar to this other problem that we resolved a while ago which was caused by Joomla loading old library files instead of the new ones? So, we renamed the existing libraries folder to libraries_old, and we copied a fresh copy of the libraries folder onto the website (from the Joomla 3.8 zip file that we just downloaded) and then we tested it. This time it worked!

Aha! So, the problem was caused by the wrong library file(s) being loaded? But which one(s)? We were determined to find out the answer to our question, so, we printed out all the included files on the fixed site, and then, we reverted back and printed out all the included files on the broken site, and we compared the list of files.

There were, in fact, many, many files that were included from the wrong places on the broken Joomla website. For example, the factory.php file was included from the libraries/joomla folder instead of the libraries/src folder. There were also many files included from the libraries/cms folder, and these files were included from folders that should no longer exist under the libraries/cms folder. In fact, the libraries/cms folder in Joomla 3.8 has only 3 folders inside it (Joomla 3.7.5 has 30 folders inside the libraries/cms folder).

It seems that the client has either updated the site manually (e.g. by overwriting the files from a fresh Joomla install), or the client has updated the site from the backend but from an old Joomla website where the update process does not include removing these old library files/folders. In any case, we think the problem is really caused by Joomla, which should take into consideration any update scenario. The problem is also ironic, since it highlights the fact that there is a huge change in the file structure in Joomla 3.8, completely contradicting a statement by a core Joomla developer that the “the difference from 3.7.5 is relatively minor”.

So, if you are seeing the Call to undefined method JApplicationSite::isClient() error on your Joomla website, then try renaming the libraries folder to libraries_old and then copying the libraries folder from a fresh Joomla 3.8 install. If it doesn’t work, or if you are seeing a different error, then please contact us. We are always ready to help, our fees are very reasonable, and we really love working on Joomla websites!

Понравилась статья? Поделиться с друзьями:
Vkontakte.INFO
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: