web-dev-qa-db-ja.com

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

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

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

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

11
hkais

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

Joomla 2.5および3.xのみ

  1. http://接頭辞がURLにないかどうかを確認します。ある場合は、追加します。この場合、https://を考慮に入れたnotがあることに注意してください。
  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リポジトリ

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

15
Lodder

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

  • 私はまだそれを必要としなかったので、コードを持っていません。しかし Lodder's answer に基づいて、Joomla!mainfestファイル/administrator/manifests/files/joomla.xmlバージョン番号を返すために。

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

3
miroxlav

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

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

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

0
Lodder