http로 joomla 버전을 얻는 방법?


11

솔루션의 스크린 샷을 보았습니다 .Jomla 버전은 http를 통해 페이지에 액세스하여 감지됩니다.

예를 들어 솔루션에 Joomla 버전의 3 자리가 모두 표시되었습니다. http를 통해서만 웹 페이지에 액세스하여 예를 들어 2.5.28 또는 1.0.x 등.

서버에 설치된 버전에 대해 알려줄 작은 응용 프로그램을 만들고 싶습니다. FTP 저장소에 항상 액세스 할 수있는 것은 아니기 때문에 간단한 HTTP GET에서 Joomla 버전을 추출하는 방법을 알고 싶습니다.


자신의 웹 사이트 또는 외부 웹 사이트를 참조하고 있습니까?
외부인 경우이


@Farahmand-제공된 링크는 2.5.28 과 같은 정확한 버전에 도움이되지 않습니다 . 1.52.5
Lodder

@Lodder- 정확한 버전을 보여주는 whitefirdesign.com/tools/joomla-version-check.html 링크를 확인하십시오 .
Farahmand

@ Lodder-링크를 확인했는데 Joomla 2.5 버전에서는 작동하지만 일부 Joomla 3 버전에서는 작동하지 않습니다.
Farahmand

답변:


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 버전을 찾을 수 없으면 (기본적으로 줌라가 아닌 사이트)이 함수는을 반환 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');

내 웹 사이트에서 다른 사용자를위한 도구로 모듈을 만들었습니다.

Joomla 버전 감지 도구

포크하거나 풀 요청을 제출하려면 Github 리포지토리도 만들었습니다.

Joomla 버전 감지 Github Repo

어쨌든, 여러분 중 일부는 아시다시피 백엔드 개발자가 아니므로 코드를 개선 할 수있는 많은 개선 사항이있을 것입니다. 다른 솔루션이 있거나 현재 가지고있는 것을 업데이트 할 수 있다면 새로운 답변으로 게시하십시오.


좋은 해결책! 어쨌든 /administrator/manifests/files/joomla.xml 파일에 액세스 할 수 있음을 의미합니다. 따라서 항상 그런 것은 아닙니다. 언급 된 다른 페이지에는 솔루션이 있으며 / 페이지의 GET에서만 버전을 감지합니다. 따라서 이것이 어떻게 수행되는지는 확실하지 않습니다. 아파치 로그는 도메인에 도착하는 것만으로 더 이상 아무것도 알 수 없습니다.
hkais

1
답변에 Github 저장소 링크를 추가했습니다.
Lodder


@Joomjunk 여러 줌라 사이트를 확인하기 위해 사이트에서 스크립트를 시도했습니다. 작동 안함. 응답이 비어 있습니다.

@Marc-일부 사이트는 작동하지만 다른 사이트는 호스트가 특정 XML 파일에 대한 읽기 권한을 허용하지 않아 내 버전 감지가 작동하는 방식으로 인해 작동하지 않습니다. 버전을 감지하기 위해 다른 방법을 사용하는 또 다른 사이트가 있지만 이들이 어떻게하는지 확실하지 않습니다. 이것을 수행하는 더 적절한 방법을 알아낼 수 있다면 구현할 것입니다.
Lodder

3

관리 하는 사이트 버전에만 관심이있는 경우 플러그인 URL을 열어 줌라 버전을 공유하는 작은 플러그인을 만들고 설치할 수 있습니다 (예 :
http://example.com/plugins/getversion/getversion.php?configuredSecret

  • 아직 필요하지 않았으므로 코드가 없습니다. 그러나 Lodder의 답변을 바탕으로 Joomla 를 읽는 방법을 볼 수 있습니다 ! /administrator/manifests/files/joomla.xml버전 번호를 반환하기 위해 mainfest 파일 .

주로 초보자를위한 참고 사항 : configuredSecret공개 된 채널을 승인 된 요청에만 공유하는 고전적인 방법 중 하나입니다. 통합 연결을 보호하는 더 좋은 방법이없는 경우 일반적으로 두 시스템을 연결하는 데 사용됩니다.


administrator / manifests / files / joomla.xml이 정답입니다. joomla 2.5 이상
Lynob

@Lynob – 확실합니다. 이 경우 OP는 전체 XML 파일이 아닌 단일 숫자 만 수신하는 간단한 응용 프로그램을 원합니다. 따라서 귀하의 솔루션은 씬 클라이언트에 대한 나의 솔루션 인 팻 클라이언트에 적합합니다.
miroxlav

0

정확히 코드 솔루션이 아니기 때문에 별도의 답변으로 추가하겠습니다.

2 개의 XHR 요청을 수행하는 Firefox 확장 프로그램을 개발했습니다. Joomla API 사이트의 첫 번째 버전은 최신 버전을, 다른 하나 joomla.xml는보고있는 현재 웹 사이트 의 파일입니다. 그런 다음 두 버전과 console.log()결과 를 비교합니다 .

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.