質問: httpでjoomlaバージョンを取得する方法 ソリューションのスクリーンショットを見ましたが、joomlaのバージョンはhttp経由でページにアクセスするだけで検出されています。例えば。ソリューションはjoomlaのバージョンの3桁すべてを表示しました。例えば2.5.28、または1.0.xなど、http経由でのみwebページにアクセスします。サーバーにインストールされているバージョンについて通知される小さなアプリケーションを作成したいと思います。 ftpストレージへのフルアクセスが常にできるわけではないので、単純なhttp getからjoomlaバージョンを抽出する方法を知りたいのですが。
回答: わかりましたので、これは私が昨日書いたものです。joomla 2.5および3.xのみ http://接頭辞がurlにないかどうかを確認します。ある場合は、追加します。この場合、https://を考慮に入れたnotがあることに注意してください。 次に、joomlaマニフェストファイルの取得を試み、が存在するか、読み取り可能かどうかを確認します。 存在する場合は、<version>タグから値を取得します。 xmlファイルが読み込めない場合は、tinymceバージョンを取得するためのフォールバックを作成しました。この場合も、<version>タグから値を読み取ろうとします。 ここからは、joomlaの各バージョンのリリースノートを調べて、どのバージョンにtinymceの更新があるかを確認するのにかなりの時間を費やしました。そうしたものは、コードのswitchブロックに追加して追加しました。このアプローチは、2つを除いて正確なバージョンを提供しませんが、平均を提供します。 jqueryのバージョンを検出することを考えていましたが、多くの人がコアバージョンを最新に更新すると、結果が不正確になることに気付きました。 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リポジトリ とにかく、ご存じのように、私はバックエンドの開発者ではないので、コードに多くの改善を加えることができます。別の解決策があるか、現在持っているものを更新できる場合は、必ず新しい回答として投稿してください。