Як отримати версію joomla за допомогою http?


11

Я бачив скріншоти рішення, там версія Joomla виявляється лише за допомогою доступу до сторінки через http.

Наприклад, рішення показало всі 3 цифри версії Joomla. наприклад, 2.5.28 або 1.0.x тощо, лише відкриваючи веб-сторінку через http.

Я хочу створити невеликий додаток, щоб повідомити про версію, встановлену на сервері. Оскільки у мене немає завжди повного доступу до FTP-пам’яті, я хотів би знати, як я можу отримати версію Joomla з простого HTTP GET.


Ви посилаєтесь на власний веб-сайт чи зовнішній веб-сайт. Якщо зовнішній, то цього не можна зробити
Лодер


@Farahmand - Надані посилання не допоможуть для точної версії, наприклад 2.5.28 . Тільки основні номери версій, такі як 1,5 і 2,5
Лодер

@Lodder - Перевірте це посилання: whitefirdesign.com/tools/joomla-version-check.html, де відображається точна версія.
Фарахман

@Lodder - я перевірив посилання, і воно працює для версій Joomla 2.5, але не працює для деяких версій Joomla 3.
Фарахманд

Відповіді:


15

Добре, це те, що я писав вчора.

Тільки для Joomla 2.5 та 3.x

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

Примітка. Цей сценарій використовує CURLтак, щоб переконатися, що він включений на вашому сервері.


class JoomlaVersions
{
    public function getJoomlaVersion($site)
    {
        // Add http prefix if missing
        if (strpos($site,'http://') === false)
        {
            $site = 'http://'.$site;
        }

        // Get the number value from the <version> tag in the XML file
        $dom = new DOMDocument;
        $url = $site . '/administrator/manifests/files/joomla.xml';
        libxml_use_internal_errors(true);

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

        if( $exists )
        {
            $dom->load($url);
            $versions = $dom->getElementsByTagName('version');

            foreach ($versions as $version) 
            {
                return $version->nodeValue;
            }
        }
        else 
        {
            $mce = $this->getTinyMCEversion($site);

            if($mce)
            {
                // Base Joomla version on the TinyMCE version
                switch ($mce)
                {
                    case '3.5.6':
                        $joomla = '3.0.0 - 3.1.6';
                        break;
                    case '4.0.10':
                        $joomla = '3.2.0 - 3.2.1';
                        break;
                    case '4.0.12':
                        $joomla = '3.2.2';
                        break;
                    case '4.0.18':
                        $joomla = '3.2.3 - 3.2.4';
                        break;
                    case '4.0.22':
                        $joomla = '3.3.0';
                        break;
                    case '4.0.28':
                        $joomla = '3.3.1 - 3.3.6';
                        break; 
                    case '4.1.7':
                        $joomla = '3.4.0';
                        break; 
                    default:
                        $joomla = '3.x';
                }

                return $joomla;
            }
            else 
            {
                return 'Unknown';
            }
        }   
    }

    // Get TinyMCE Version 
    private function getTinyMCEversion($site)
    {
        $tinymce = $site . '/plugins/editors/tinymce/tinymce.xml';      
        libxml_use_internal_errors(true);

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

        if( $exists )
        {
            $dom->load($tinymce);
            $vTag = $dom->getElementsByTagName('version');

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

    // Check file exists using CURL
    private function XMLexists($url)
    {
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_NOBODY, true);
        curl_exec($ch);
        $getinfo = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        return $getinfo;
    }

}

Потім викличте функцію так:

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

Я створив на своєму веб-сайті модуль як інструмент для інших користувачів:

Інструмент виявлення версії Joomla

Я також створив сховище Github, якщо ви хочете роздрібнити його або надіслати запити на тягнення:

Версія Joomla виявляє Github Repo

У будь-якому випадку, як деякі з вас знають, я не розробник програми, тому, мабуть, є багато вдосконалень, які можна внести до коду. Якщо у вас є інше рішення або ви можете оновити те, що у мене зараз, обов’язково опублікуйте це як нову відповідь.


чудове рішення! У будь-якому випадку це означає, що у вас є доступ до файлу /administrator/manifests/files/joomla.xml. Тож це не завжди так. На іншій згаданій сторінці є рішення, яке виявляє версію лише в GET / page. Тож абсолютно незрозуміло, як це робиться. Журнали apache розповідають лише про просто дістатися до / домену, нічого більше.
hkais

1
До відповіді я додав посилання на сховище Github.
Лоджер

Відмінна відповідь, яка також допомагає відповісти на питання, яке я задав на joomla.stackexchange.com/q/182/120
Ніл Робертсон,

@Joomjunk Я спробував сценарій на вашому сайті, щоб перевірити кілька сайтів Joomla. Не працює. Відповідь порожня.

@Marc - Деякі сайти працюють, інші не зважають на те, що хост не дозволяє дозволити читати певні файли XML, і так працює моє виявлення версій. Є ще один сайт, який використовує різні методи виявлення версії, однак я не впевнений, як вони це роблять. Якщо я зможу знайти більш підходящий спосіб зробити це, я його втілю в життя.
Лодер

3

Якщо вас цікавлять лише версії веб-сайтів, якими ви керуєте , ви можете створити та встановити невеликий плагін, який розділяє версію Joomla, відкривши, наприклад, URL-адресу плагіна.
http://example.com/plugins/getversion/getversion.php?configuredSecret

  • Мені це ще не потрібно, тому код у мене немає. Але виходячи з відповіді Лоджера , ви можете побачити, як читати Joomla! файл mainfest /administrator/manifests/files/joomla.xml, щоб повернути номер версії.

Зверніть увагу переважно на новачків: configuredSecretце один із класичних підходів ділитися загальнодоступним каналом лише для авторизованих запитів. Він зазвичай використовується для підключення двох систем, якщо немає кращого способу захисту інтегруючого з'єднання.


Адміністратор / manifests / files / joomla.xml - це відповідь, як мінімум для Joomla 2.5
Lynob

@Lynob - точно. У цьому випадку ОП хотіла б мати легку програму, яка отримує лише одне число, а не весь XML-файл. Тож ваше рішення підходить для жирного клієнта, моє рішення для тонкого клієнта.
miroxlav

0

Я додам це як окрему відповідь, оскільки це не зовсім рішення коду.

Я розробив розширення Firefox, яке виконує 2 запити XHR. Перший - на веб-сайті Joomla API, щоб отримати останню версію, другий - у joomla.xmlфайлі поточного веб-сайту, який ви переглядаєте. Потім буде порівняно дві версії та console.log()результат.

URL: https://github.com/C-Lodder/joomla-update-checker

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.