我看过一个解决方案的屏幕截图,那里的Joomla版本仅通过http访问页面而被检测到。
例如,解决方案显示了Joomla版本的所有3位数字。例如2.5.28或1.0.x等,只需通过http访问网页即可。
我想创建一个小型应用程序,以通知服务器上安装的版本。由于我并不总是拥有对FTP存储的完全访问权限,因此我想知道如何从简单的HTTP GET中提取Joomla版本。
我看过一个解决方案的屏幕截图,那里的Joomla版本仅通过http访问页面而被检测到。
例如,解决方案显示了Joomla版本的所有3位数字。例如2.5.28或1.0.x等,只需通过http访问网页即可。
我想创建一个小型应用程序,以通知服务器上安装的版本。由于我并不总是拥有对FTP存储的完全访问权限,因此我想知道如何从简单的HTTP GET中提取Joomla版本。
Answers:
好的,这就是我昨天写的。
http://
网址中是否缺少前缀。如果是,则将其添加。请注意,在这种情况下我也不会考虑https://
考虑。<version>
标签获取值。<version>
标签读取值。switch
在代码中进一步添加了自己的代码块。这种方法除了给出其中的2个之外,不会给出确切的版本,但会给出平均值。我当时正在考虑检测jQuery版本,但后来意识到很多人将核心版本更新为最新版本,这会使结果不准确。Unknown
。注意:此脚本使用,CURL
因此请确保在服务器上启用了该脚本。
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;
}
}
然后像这样调用该函数:
$version = new JoomlaVersions;
echo $version->getJoomlaVersion('http://joomla.org');
我已经在网站上创建了一个模块作为其他用户的工具:
如果您希望分叉它或提交请求,我也创建了一个Github存储库:
无论如何,正如您所知,我不是后端开发人员,因此可能会对代码进行很多改进。如果您有其他解决方案,或者可以更新我当前拥有的解决方案,请确保将其发布为新答案。
如果您只对所管理网站的版本感兴趣,则可以通过打开插件URL创建并安装一个共享Joomla版本的小插件。
http://example.com/plugins/getversion/getversion.php?configuredSecret
/administrator/manifests/files/joomla.xml
以返回版本号。主要针对新手的注意事项:这configuredSecret
是仅向授权请求共享公开可见频道的经典方法之一。如果没有更好的方法来保护集成连接,则通常用于连接两个系统。
我将其添加为单独的答案,因为它不完全是代码解决方案。
我已经开发了执行2个XHR请求的Firefox扩展。第一个访问Joomla API网站以获取最新版本,另一个joomla.xml
访问您正在查看的当前网站的文件。然后它将比较两个版本和console.log()
结果。