Ok, das habe ich gestern geschrieben.
Nur für Joomla 2.5 und 3.x.
- Überprüfen Sie, ob das
http://
Präfix in der URL fehlt. Wenn dies der Fall ist, wird es hinzugefügt. Beachten Sie, dass in diesem Fall habe ich nicht genommen https://
in Betracht.
- Anschließend wird versucht, die Joomla-Manifestdatei abzurufen, und es wird geprüft, ob sie vorhanden / lesbar ist.
- Wenn es existiert, erhält es den Wert vom
<version>
Tag.
- Wenn die XML-Datei nicht lesbar ist, habe ich einen Fallback geschrieben, um die TinyMCE-Version zu erhalten. Wieder wird versucht, den Wert aus dem
<version>
Tag zu lesen .
- Von hier an habe ich ziemlich lange die Versionshinweise für jede Joomla-Version durchgesehen, um festzustellen, welche Versionen ein TinyMCE-Update enthalten. Diejenigen, die das taten, fügte ich dem
switch
Block hinzu, der im Code weiter eigen ist. Dieser Ansatz gibt nicht die genaue Version außer 2 von ihnen, aber es gibt einen Durchschnitt. Ich habe darüber nachgedacht, die jQuery-Version zu erkennen, aber dann festgestellt, dass viele Leute die Kernversion auf die neueste Version aktualisieren, wodurch die Ergebnisse ungenau werden.
- Wenn die TinyMCE-Version nicht gefunden werden kann (also im Grunde eine Nicht-Joomla-Site), wird die Funktion zurückgegeben
Unknown
.
Hinweis: Dieses Skript verwendet CURL
, stellen Sie also sicher, dass es auf Ihrem Server aktiviert ist.
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;
}
}
Rufen Sie dann die Funktion folgendermaßen auf:
$version = new JoomlaVersions;
echo $version->getJoomlaVersion('http://joomla.org');
Ich habe auf meiner Website ein Modul als Tool für andere Benutzer erstellt:
Joomla Version Detection Tool
Ich habe auch ein Github-Repository erstellt, wenn Sie es teilen oder Pull-Anforderungen senden möchten:
Joomla Version Detect Github Repo
Wie einige von Ihnen wissen, bin ich kein Backend-Entwickler, daher gibt es wahrscheinlich viele Verbesserungen, die am Code vorgenommen werden können. Wenn Sie eine andere Lösung haben oder aktualisieren können, was ich derzeit habe, stellen Sie sicher, dass Sie diese als neue Antwort veröffentlichen.