it-swarm.it

Come ottenere la versione di Joomla tramite http?

Ho visto schermate di una soluzione, lì la versione di Joomla viene rilevata accedendo alla pagina solo tramite http.

Per esempio. la soluzione mostrava tutte e 3 le cifre di una versione di Joomla. per esempio. 2.5.28 o 1.0.x e così via accedendo alla pagina Web solo tramite http.

Voglio creare una piccola applicazione per essere informato sulla versione installata sul server. Dal momento che non ho sempre pieno accesso all'archivio FTP, vorrei sapere come posso estrarre la versione di Joomla da un semplice HTTP GET.

11
hkais

Ok, questo è quello che stavo scrivendo ieri.

Solo per Joomla 2.5 e 3.x.

  1. Verifica se http:// prefisso mancante dall'URL. Se lo è, lo aggiunge. Tieni presente che in questo caso non ho non preso https:// in considerazione.
  2. Quindi cerca di ottenere il file manifest di Joomla e controlla se esiste/è leggibile.
  3. Se esiste, ottiene il valore da <version> tag.
  4. Se il file XML non è leggibile, ho scritto un fallback per ottenere la versione di TinyMCE. Ancora una volta, proverà a leggere il valore da <version> tag.
  5. Da qui in poi, ho trascorso parecchio tempo a leggere le note di rilascio di ogni versione di Joomla per vedere quali versioni hanno un aggiornamento TinyMCE. Quelli che l'hanno fatto, l'ho aggiunto al blocco switch più avanti nel codice. Questo approccio non fornirà la versione esatta a parte 2, ma fornirà una media. Stavo pensando di rilevare la versione di jQuery ma poi mi sono reso conto che molte persone aggiornano la versione principale alla più recente, il che renderebbe i risultati inaccurati.
  6. Se non è possibile trovare la versione di TinyMCE (quindi fondamentalmente un sito non Joomla), la funzione restituirà Unknown.

Nota: Questo script utilizza CURL quindi assicurati che sia abilitato sul tuo server.


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

}

Quindi chiama la funzione in questo modo:

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

Ho creato un modulo sul mio sito Web come strumento per altri utenti:

Joomla Version Detection Tool

Ho anche creato un repository Github se desideri fork o inviare richieste pull:

Joomla Version Detect Github Repo

Comunque, come alcuni di voi sanno, non sono uno sviluppatore di back-end, quindi probabilmente ci sono molti miglioramenti che possono essere apportati al codice. Se hai un'altra soluzione o riesci ad aggiornare quello che ho attualmente, assicurati di pubblicarlo come nuova risposta.

15
Lodder

Se sei interessato solo alle versioni dei siti gestisci, puoi creare e installare un piccolo plugin che condivide Versione di Joomla aprendo l'URL del plugin, ad esempio
http://example.com/plugins/getversion/getversion.php?configuredSecret

  • Non ne avevo ancora bisogno, quindi non ho il codice. Ma in base a risposta del Lodder , puoi vedere come leggere Joomla ! file mainfest /administrator/manifests/files/joomla.xml per restituire il numero di versione.

Nota soprattutto per i neofiti: configuredSecret è uno degli approcci classici per condividere il canale visibile pubblicamente solo alle richieste autorizzate. Viene comunemente utilizzato per collegare due sistemi se non esiste un modo migliore per proteggere la connessione integrata.

3
miroxlav

Aggiungerò questo come una risposta separata, poiché non è esattamente una soluzione di codice.

Ho sviluppato un'estensione per Firefox che esegue 2 richieste XHR. Il primo sul sito dell'API Joomla per ottenere l'ultima versione, l'altro sul file joomla.xml Del sito Web corrente che stai visualizzando. Quindi confronterà le due versioni e console.log() il risultato.

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

0
Lodder