httpでjoomlaバージョンを取得する方法


11

ソリューションのスクリーンショットを見ましたが、Joomlaのバージョンはhttp経由でページにアクセスするだけで検出されています。

たとえば、ソリューションはJoomlaのバージョンの3桁すべてを表示しました。例:2.5.28、または1.0.xなど、http経由でのみWebページにアクセスします。

サーバーにインストールされているバージョンについて通知される小さなアプリケーションを作成したいと思います。FTPストレージへのフルアクセスが常にできるわけではないので、単純なHTTP GETからJoomlaバージョンを抽出する方法を知りたいのですが。


自分のWebサイトを参照していますか、それとも外部のWebサイトを参照していますか。外部の場合、これは実行できません
Lodder、2015年


@Farahmand-提供されているリンクは、2.5.28などの正確なバージョンでは役に立ちません1.52.5
Lodder

@Lodder-次のリンクを確認してください:正確なバージョンを示すwhitefirdesign.com/tools/joomla-version-check.html
Farahmand、2015年

@Lodder-リンクを確認したところ、Joomla 2.5バージョンでは機能しましたが、一部のJoomla 3バージョンでは機能しません。
Farahmand、2015年

回答:


15

わかりましたので、これは私が昨日書いたものです。

Joomla 2.5および3.xのみ

  1. http://プレフィックスがURLにないかどうかを確認します。ある場合は、追加します。この場合、私がしたことを注意しませ取らhttps://考慮。
  2. 次に、Joomlaマニフェストファイルの取得を試み、が存在するか、読み取り可能かどうかを確認します。
  3. 存在する場合は、<version>タグから値を取得します。
  4. XMLファイルが読み込めない場合は、TinyMCEバージョンを取得するためのフォールバックを作成しました。繰り返しになりますが、<version>タグから値を読み取ろうとします。
  5. ここからは、Joomlaの各バージョンのリリースノートを調べて、どのバージョンにTinyMCEの更新があるかを確認するのにかなりの時間を費やしました。そうしたものは、私switchはコードにさらに独自のブロックを追加しました。このアプローチは、2つを除いて正確なバージョンを提供しませんが、平均を提供します。jQueryのバージョンを検出することを考えていましたが、多くの人がコアバージョンを最新に更新すると、結果が不正確になることに気付きました。
  6. TinyMCEバージョンが見つからない場合(つまり、Joomla以外のサイトの場合)、関数はを返し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');

他のユーザーのためのツールとして、自分のWebサイトにモジュールを作成しました。

Joomlaバージョン検出ツール

フォークしたり、プルリクエストを送信したりする場合は、Githubリポジトリも作成しました。

Joomlaバージョン検出Githubリポジトリ

とにかく、ご存じのように、私はバックエンドの開発者ではないので、コードに多くの改善を加えることができます。別の解決策があるか、現在持っているものを更新できる場合は、必ず新しい回答として投稿してください。


素晴らしい解決策!とにかく、/ administrator / manifests / files / joomla.xmlファイルにアクセスできることを意味します。したがって、これは常に当てはまるわけではありません。もう1つの言及されたページには、/ページのGETでのみバージョンを検出するソリューションがあります。したがって、これがどのように行われるかは完全に不明確です。Apacheログはドメインの/への単純な取得のみを通知し、それ以上は通知しません。
hkais 2015年

1
答えにGithubリポジトリリンクを追加しました。
Lodder 2015年


@JoomjunkいくつかのJoomlaサイトをチェックするためにあなたのサイトでスクリプトを試しました。機能していません。応答は空です。

@Marc-一部のサイトは機能しますが、一部のサイトは、ホストが特定のXMLファイルの読み取り権限を許可しないため、バージョン検出が機能するため、機能しません。バージョンを検出するためにさまざまな方法を使用する別のサイトがありますが、どのようにしてこれを行うのかはわかりません。これを行うためのより適切な方法を理解できる場合は、それを実装します。
Lodder

3

管理しているサイトのバージョンのみに関心がある場合は、プラグインURLを開くことで、Joomlaバージョンを共有する小さなプラグインを作成してインストールできます。次に例を示します。
http://example.com/plugins/getversion/getversion.php?configuredSecret

  • 私はまだそれを必要としなかったので、コードを持っていません。しかし、ロダーの答えに基づいて、Joomlaの読み方を見ることができます/administrator/manifests/files/joomla.xmlバージョン番号を返すためのmainfestファイル。

主に初心者に注意してください:configuredSecret公に見えるチャンネルを許可されたリクエストのみに共有する古典的なアプローチの1つです。統合接続を保護するためのより良い方法がない場合、2つのシステムを接続するために一般的に使用されます。


Administrator / manifests / files / joomla.xmlが答えです。少なくともjoomla 2.5の場合
Lynob

@Lynob –確かに。この場合、OPは、XMLファイル全体ではなく、単一の数値のみを受信する軽量のアプリケーションが必要です。したがって、あなたのソリューションはファットクライアントに適しています。私のソリューションはシンクライアントです。
miroxlav 2016年

0

これは正確なコードソリューションではないため、これを個別の回答として追加します。

2つのXHRリクエストを実行するFirefox拡張機能を開発しました。1つは最新バージョンを取得するためのJoomla APIサイト、もう1つjoomla.xmlは現在表示している現在のWebサイトのファイルです。次に、2つのバージョンとconsole.log()結果を比較します。

URL:https : //github.com/C-Lodder/joomla-update-checker

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.