Como obter a versão do joomla por http?


11

Eu vi capturas de tela de uma solução, lá a versão do Joomla está sendo detectada acessando apenas a página via http.

Por exemplo, a solução exibiu todos os 3 dígitos de uma versão do Joomla. por exemplo, 2.5.28 ou 1.0.xe assim por diante, acessando apenas a página da Web via http.

Quero criar um pequeno aplicativo para ser informado sobre a versão instalada no servidor. Como nem sempre tenho acesso total ao armazenamento FTP, gostaria de saber como extrair a versão do Joomla a partir de um simples HTTP GET.


Você está se referindo ao seu próprio site ou a um site externo. Se externo, então este não pode ser feito
Lodder


@Farahmand - Os links fornecidos não ajudarão na versão exata, como 2.5.28 . Somente números de versão principal, como 1.5 e 2.5
Lodder

@Lodder - Por favor, verifique este link: whitefirdesign.com/tools/joomla-version-check.html que mostra a versão exata.
Farahmand

@Lodder - verifiquei o link e funciona nas versões Joomla 2.5, mas não nas versões Joomla 3.
Farahmand

Respostas:


15

Ok, então é isso que eu estava escrevendo ontem.

Apenas para Joomla 2.5 e 3.x

  1. Verifique se o http://prefixo está ausente no URL. Se for, então ele adiciona. Observe que, neste caso, não levei https://em consideração.
  2. Em seguida, tenta obter o arquivo de manifesto do Joomla e verifica se existe / é legível.
  3. Se existir, obtém o valor da <version>tag.
  4. Se o arquivo XML não estiver legível, escrevi um fallback para obter a versão do TinyMCE. Novamente, ele tentará ler o valor da <version>tag.
  5. A partir daqui, passei muito tempo revisando as notas de versão de cada versão do Joomla para ver quais versões possuem uma atualização do TinyMCE. Aqueles que fizeram, eu adicionei ao switchbloco mais adiante no código. Essa abordagem não fornecerá a versão exata além de duas delas, mas fornecerá uma média. Eu estava pensando em detectar a versão do jQuery, mas percebi que muitas pessoas atualizavam a versão principal para a mais recente, o que tornaria os resultados imprecisos.
  6. Se a versão do TinyMCE não puder ser encontrada (portanto, basicamente, um site que não seja do Joomla), a função retornará Unknown.

Nota: Este script usa, CURLportanto, verifique se ele está ativado no seu servidor.


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;
    }

}

Em seguida, chame a função da seguinte maneira:

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

Eu criei um módulo no meu site como uma ferramenta para outros usuários:

Ferramenta de Detecção de Versão do Joomla

Também criei um repositório do Github, se você deseja bifurcar ou enviar solicitações pull:

Versão do Joomla Detect Repo Github

De qualquer forma, como alguns de vocês sabem, eu não sou um desenvolvedor de back-end, então provavelmente há muitas melhorias que podem ser feitas no código. Se você tiver outra solução ou puder atualizar o que tenho atualmente, não deixe de publicá-la como uma nova resposta.


ótima solução! De qualquer forma, isso implica que você tenha acesso ao arquivo /administrator/manifests/files/joomla.xml. Portanto, esse nem sempre é o caso. A outra página mencionada possui uma solução, que detecta a versão apenas no GET da página /. Portanto, não está totalmente claro como isso é feito. Os logs do apache informam apenas um simples acesso ao / do domínio, nada mais.
hkais

1
Adicionei um link de repositório do Github à resposta.
Lodder

Excelente resposta que também ajuda a responder à pergunta que fiz no joomla.stackexchange.com/q/182/120
Neil Robertson

@Joomjunk Tentei o script em seu site para verificar vários sites Joomla. Não está funcionando. A resposta está vazia.

@ Marc - Alguns sites funcionam, outros não, devido ao host não permitir permissões de leitura para certos arquivos XML, e é assim que funciona a detecção de versão. Há outro site que usa métodos diferentes para detectar a versão, no entanto, não tenho certeza de como eles fazem isso. Se eu puder descobrir uma maneira mais apropriada de fazer isso, eu a implementarei.
Lodder

3

Se você estiver interessado apenas nas versões dos sites gerenciados , poderá criar e instalar um pequeno plugin que compartilhe a versão do Joomla abrindo a URL do plugin, por exemplo
http://example.com/plugins/getversion/getversion.php?configuredSecret

  • Eu ainda não precisava disso, então não tenho o código. Mas com base na resposta de Lodder , você pode ver como ler o Joomla! arquivo mainfest /administrator/manifests/files/joomla.xmlpara retornar o número da versão.

Nota principalmente para iniciantes: configuredSecreté uma das abordagens clássicas para compartilhar canais publicamente visíveis apenas para solicitações autorizadas. É comumente usado para conectar dois sistemas, se não houver melhor maneira de proteger a conexão de integração.


administrador / manifesta / files / joomla.xml é a resposta, para Joomla 2.5, pelo menos
Lynob

@ Lynob - com certeza. Nesse caso, o OP gostaria de ter um aplicativo leve que receba apenas um único número, não um arquivo XML inteiro. Portanto, sua solução é adequada para clientes gordos, minha solução para clientes finos.
miroxlav

0

Vou adicionar isso como uma resposta separada, pois não é exatamente uma solução de código.

Eu desenvolvi uma extensão do Firefox que executa 2 solicitações XHR. O primeiro no site da API do Joomla para obter a versão mais recente, o outro no joomla.xmlarquivo do site atual que você está visualizando. Ele comparará as duas versões e console.log()o resultado.

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.