Come ottenere la versione di Joomla tramite http?


11

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

Ad esempio, la soluzione mostrava tutte e 3 le cifre di una versione di Joomla. ad es. 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.


Ti riferisci al tuo sito Web o a un sito Web esterno. Se esterno, allora questo non può essere fatto
Lodder


@Farahmand - I collegamenti forniti non saranno di alcun aiuto per la versione esatta, ad esempio 2.5.28 . Solo numeri di versione principali come 1.5 e 2.5
Lodder

@Lodder: controlla questo link: whitefirdesign.com/tools/joomla-version-check.html che mostra la versione esatta.
Farahmand,

@Lodder - Ho controllato il collegamento e funziona per le versioni Joomla 2.5 ma non funziona per alcune versioni di Joomla 3.
Farahmand,

Risposte:


15

Ok, questo è quello che stavo scrivendo ieri.

Solo per Joomla 2.5 e 3.x.

  1. Controlla se il http://prefisso manca nell'URL. Se lo è, lo aggiunge. Si noti che in questo caso 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 dal <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 dal <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 switchblocco ulteriormente 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 tornerà Unknown.

Nota: questo script utilizza CURLquindi 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:

Strumento di rilevamento della versione di Joomla

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

Versione Joomla Rileva 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.


ottima soluzione! Ad ogni modo implica che hai accesso al file /administrator/manifests/files/joomla.xml. Quindi non è sempre così. L'altra pagina menzionata ha una soluzione, che rileva la versione solo sul GET della / pagina. Quindi non è chiaro come sia fatto. I registri di Apache indicano solo un semplice accesso al / del dominio, niente di più.
hkais

1
Ho aggiunto un link al repository Github alla risposta.
Lodder

Ottima risposta che aiuta anche a rispondere alla domanda che ho posto a joomla.stackexchange.com/q/182/120
Neil Robertson

@Joomjunk Ho provato lo script sul tuo sito per controllare diversi siti Joomla. Non funziona. La risposta è vuota

@Marc - Alcuni siti funzionano, altri non sono dovuti al fatto che l'host non consente le autorizzazioni di lettura per determinati file XML ed è così che funziona il mio rilevamento della versione. Esiste un altro sito che utilizza metodi diversi per rilevare la versione, tuttavia non sono sicuro di come lo facciano. Se riesco a capire un modo più appropriato di farlo, lo implementerò.
Lodder

3

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

  • Non ne avevo ancora bisogno, quindi non ho il codice. Ma in base alla risposta di Lodder , puoi vedere come leggere Joomla! file mainfest /administrator/manifests/files/joomla.xmlper 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.


administrator / manifest / files / joomla.xml è la risposta, almeno per joomla 2.5
Lynob,

@Lynob - certo. In questo caso, l'OP vorrebbe avere un'applicazione leggera che riceve solo un singolo numero, non l'intero file XML. Quindi la tua soluzione è adatta per il cliente grasso, la mia soluzione per il cliente sottile.
miroxlav,

0

Aggiungerò questo come una risposta separata, in quanto non è esattamente una soluzione di codice.

Ho sviluppato un'estensione per Firefox che esegue 2 richieste XHR. Il primo al sito API Joomla per ottenere l'ultima versione, l'altro al joomla.xmlfile 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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.