Ok, questo è quello che stavo scrivendo ieri.
Solo per Joomla 2.5 e 3.x.
- Controlla se il
http://
prefisso manca nell'URL. Se lo è, lo aggiunge. Si noti che in questo caso ho non preso https://
in considerazione.
- Quindi cerca di ottenere il file manifest di Joomla e controlla se esiste / è leggibile.
- Se esiste, ottiene il valore dal
<version>
tag.
- 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.
- 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
switch
blocco 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.
- Se non è possibile trovare la versione di TinyMCE (quindi fondamentalmente un sito non Joomla), la funzione tornerà
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:
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.