ti-enxame.com

Como obter a versão do joomla por http?

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 três 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.

11
hkais

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, eu não tirei 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 do <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 do <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 isso, adicionei ao bloco switch que é o próprio 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 CURL, portanto, 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, publique-a como uma nova resposta.

15
Lodder

Se você estiver interessado apenas nas versões dos sites você gerencia, poderá criar e instalar um pequeno plugin que compartilhe 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 em resposta de Lodder , você pode ver como ler Joomla ! arquivo do mainfest /administrator/manifests/files/joomla.xml para retornar o número da versão.

Observe 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.

3
miroxlav

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 arquivo joomla.xml 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

0
Lodder