J'ai vu des captures d'écran d'une solution, la version de Joomla étant détectée en accédant uniquement à la page via http.
Par exemple. la solution affiche les 3 chiffres d’une version de Joomla. par exemple. 2.5.28, ou 1.0.x, etc. en accédant uniquement à la page Web via http.
Je souhaite créer une petite application pour être informé de la version installée sur le serveur. Étant donné que je n'ai pas toujours un accès complet au stockage FTP, j'aimerais savoir comment extraire la version de Joomla à partir d'un simple HTTP GET.
Ok, voici ce que j’écrivais hier.
http://
Le préfixe _ est manquant dans l'URL. Si c'est le cas, alors il l'ajoute. Notez que dans ce cas j'ai pas pris https://
en considération.<version>
tag.<version>
tag.switch
plus en plus propre dans le code. Cette approche ne donnera pas la version exacte à part 2, mais elle donnera une moyenne. Je pensais à la détection de la version de jQuery, mais je me suis rendu compte que beaucoup de personnes mettaient à jour la version principale à la dernière, ce qui rendrait les résultats inexacts.Unknown
. Remarque: Ce script utilise CURL
, assurez-vous qu'il est activé sur votre serveur.
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;
}
}
Appelez ensuite la fonction comme suit:
$version = new JoomlaVersions;
echo $version->getJoomlaVersion('http://joomla.org');
J'ai créé un module sur mon site Web en tant qu'outil pour les autres utilisateurs:
Outil de détection de version de Joomla
J'ai également créé un référentiel Github si vous souhaitez le bifurquer ou soumettre des demandes d'extraction:
Joomla Version Detect Github Repo
Quoi qu'il en soit, comme certains d'entre vous le savent, je ne suis pas un développeur back-end, de nombreuses améliorations peuvent donc être apportées au code. Si vous avez une autre solution ou pouvez mettre à jour ce que j'ai actuellement, assurez-vous de la poster comme nouvelle réponse.
Si vous êtes intéressé uniquement par les versions de sites vous gérez, vous pouvez créer et installer un petit plugin qui partage Version Joomla en ouvrant l'URL du plugin, par exemplehttp://example.com/plugins/getversion/getversion.php?configuredSecret
/administrator/manifests/files/joomla.xml
afin de renvoyer le numéro de version.Note principalement pour les débutants: configuredSecret
est l’une des approches classiques pour partager le canal visible publiquement uniquement avec les requêtes autorisées. Il est couramment utilisé pour connecter deux systèmes s'il n'existe pas de meilleur moyen de protéger la connexion d'intégration.
J'ajouterai ceci en tant que réponse séparée, car ce n'est pas exactement une solution de code.
J'ai développé une extension Firefox qui effectue 2 requêtes XHR. Le premier sur le site de l'API Joomla pour obtenir la dernière version, l'autre sur le fichier joomla.xml
Du site Web actuel que vous consultez. Il comparera ensuite les deux versions et console.log()
le résultat.