Как получить версию joomla по http?

Я видел скриншоты решения, там версия Joomla обнаруживается только путем доступа к странице через http.

например. решение отобразило все 3 цифры версии Joomla. например 2.5.28 или 1.0.x и т. Д., Только обращаясь к веб-странице через http.

Я хочу создать небольшое приложение для получения информации о версии, установленной на сервере. Поскольку у меня нет постоянного доступа к FTP-хранилищу, я хотел бы знать, как я могу извлечь версию Joomla из простого HTTP GET.

10 голосов | спросил hkais 22 Jpm1000000pmThu, 22 Jan 2015 18:50:38 +030015 2015, 18:50:38

2 ответа


14

Хорошо, так вот что я писал вчера.

Только для Joomla 2.5 и 3.x

  1. Проверьте, отсутствует ли в URL префикс http: //. Если это так, то добавляет его. Обратите внимание: в этом случае я учитываю не https: //.
  2. Затем он пытается получить файл манифеста Joomla и проверяет, существует ли /читается.
  3. Если он существует, он получает значение из тега <version>.
  4. Если файл XML не читается, я написал резервную копию, чтобы получить версию TinyMCE. Опять же, он попытается прочитать значение из тега <version>.
  5. Здесь я долгое время проделывал заметки о выпуске для каждой версии Joomla, чтобы узнать, какие версии имеют обновление TinyMCE. Те, что сделали, я добавил к блоку switch, который далее принадлежит в коде. Такой подход не даст точной версии, кроме двух из них, но даст среднее значение. Я думал об обнаружении версии jQuery, но потом понял, что многие люди обновляют базовую версию до последней, которая затем сделает результаты неточными.
  6. Если версия TinyMCE не может быть найдена (так, в основном, не-Joomla-сайт), то функция вернет Unknown.

Примечание. Этот сценарий использует CURL, поэтому убедитесь, что он включен на вашем сервере.


класс JoomlaVersions
{
    публичная функция getJoomlaVersion ($ site)
    {
        //Добавить http-префикс, если отсутствует
        if (strpos ($ site, 'http: //') === false)
        {
            $ site = 'http: //'.$site;
        }

        //Получаем числовое значение из <version> тег в файле XML
        $ dom = новый DOMDocument;
        $ url = $ site. '/administrator/manifests/files/joomla.xml';
        libxml_use_internal_errors (истина);

        $ exists = $ this-> XMLexists ($ url);

        if ($ существует)
        {
            $ Dom- > нагрузка ($ URL);
            $ versions = $ dom-> getElementsByTagName ('version');

            foreach ($ версии в виде $ версии)
            {
                return $ version-> nodeValue;
            }
        }
        еще
        {
            $ mce = $ this-> getTinyMCEversion ($ site);

            если ($ MCE)
            {
                //Базовая версия Joomla в версии TinyMCE
                переключатель ($ mce)
                {
                    случай «3.5.6»:
                        $ joomla = '3.0.0 - 3.1.6';
                        ломать;
                    case '4.0.10':
                        $ joomla = '3.2.0 - 3.2.1';
                        ломать;
                    case '4.0.12':
                        $ joomla = '3.2.2';
                        ломать;
                    case '4.0.18':
                        $ joomla = '3.2.3 - 3.2.4';
                        ломать;
                    case '4.0.22':
                        $ joomla = '3.3.0';
                        ломать;
                    case '4.0.28':
                        $ joomla = '3.3.1 - 3.3.6';
                        ломать;
                    случае «4.1.7»:
                        $ joomla = '3.4.0';
                        ломать;
                    по умолчанию:
                        $ joomla = '3.x';
                }

                return $ joomla;
            }
            еще
            {
                return 'Unknown';
            }
        }
    }

    //Получить версию TinyMCE
    частная функция getTinyMCEversion ($ site)
    {
        $ tinymce = $ site. '/plugins/editors/tinymce/tinymce.xml';
        libxml_use_internal_errors (истина);

        $ exists = $ this-> XMLexists ($ tinymce);

        if ($ существует)
        {
            $ Dom- > нагрузка ($ TinyMCE);
            $ vTag = $ dom-> getElementsByTagName ('version');

            foreach ($ vTag как $ tag)
            {
                return $ tag-> nodeValue;
            }
        }
    }

    //Проверить файл существует с помощью CURL
    частная функция XMLexists ($ url)
    {
        $ ch = curl_init ($ url);
        curl_setopt ($ ch, CURLOPT_NOBODY, true);
        curl_exec ($ ч);
        $ getinfo = curl_getinfo ($ ch, CURLINFO_HTTP_CODE);
        curl_close ($ ч);

        return $ getinfo;
    }

}

Затем вызовите функцию следующим образом:

$ version = new JoomlaVersions;
echo $ version-> getJoomlaVersion ('http://joomla.org');

Я создал модуль на своем веб-сайте в качестве инструмента для других пользователей:

Инструмент обнаружения версии Joomla

Я также создал репозиторий Github, если вы хотите разветвить его или отправить запросы на запросы:

Версия Joomla Определите Github Repo

В любом случае, как вам известно, я не сторонний разработчик, поэтому, возможно, есть много улучшений, которые могут быть внесены в код. Если у вас есть другое решение или вы можете обновитьЯ в настоящее время, не забудьте опубликовать его как новый ответ.

ответил Lodder 24 Jpm1000000pmSat, 24 Jan 2015 16:20:12 +030015 2015, 16:20:12
2

Если вас интересуют только версии сайтов , вы управляете , тогда вы можете создать и установить небольшой плагин, который разделяет версию Joomla, открывая URL-адрес плагина, например < бр> http://example.com/plugins/getversion/getversion.php?configuredSecret

  • Мне он еще не нужен, поэтому у меня нет кода. Но на основе ответа Lodder вы можете увидеть, как читать файл Joomla! mainfest < code> /administrator/manifests/files/joomla.xml, чтобы вернуть номер версии.

Обратите внимание, главным образом, на новичков: configureSecret - один из классических подходов к обмениванию общедоступного канала только с авторизованными запросами. Он обычно используется для подключения двух систем, если нет лучшего способа защиты интегрирующего соединения.

ответил miroxlav 24 Jpm1000000pmSat, 24 Jan 2015 16:34:02 +030015 2015, 16:34:02

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132