Http ile joomla sürümü nasıl alınır?


11

Bir çözümün ekran görüntülerini gördüm, orada Joomla sürümü sadece http yoluyla sayfaya erişerek algılanıyor.

Örneğin, çözüm Joomla'nın bir versiyonunun 3 basamağını da gösterdi. ör. 2.5.28 veya 1.0.x vb. web sayfasına yalnızca http üzerinden erişerek.

Sunucuda yüklü sürüm hakkında bilgilendirilmek için küçük bir uygulama oluşturmak istiyorum. FTP depolama alanına her zaman tam erişimim olmadığından, Joomla sürümünü basit bir HTTP GET'ten nasıl ayıklayabileceğimi bilmek istiyorum.


Kendi web sitenize mi yoksa harici bir web sitesine mi atıfta bulunuyorsunuz? Harici ise, bu yapılamaz
Lodder


@Farahmand - Sağlanan bağlantılar, 2.5.28 gibi tam sürüm için herhangi bir yardım olmayacaktır . Sadece 1.5 ve 2.5
Lodder

@Lodder - Lütfen şu bağlantıyı kontrol edin: whitefirdesign.com/tools/joomla-version-check.html tam sürümü gösterir.
Farahmand

@Lodder - Bağlantıyı kontrol ettim ve Joomla 2.5 sürümleri için çalışıyor, ancak bazı Joomla 3 sürümleri için çalışmıyor.
Farahmand

Yanıtlar:


15

Tamam, dün yazdığım şey buydu.

Yalnızca Joomla 2.5 ve 3.x için

  1. Ön http://ekin URL'de bulunup bulunmadığını kontrol edin . Öyleyse, ekler. Bu durumda ben ki Not değil alınan https://dikkate.
  2. Daha sonra Joomla manifest dosyasını almaya çalışır ve var olup olmadığını / okunabilir olup olmadığını kontrol eder.
  3. Varsa, değeri <version>etiketten alır.
  4. XML dosyası okunamıyorsa, TinyMCE sürümünü almak için bir yedek yazdım. Yine, <version>etiketten değeri okumaya çalışacaktır .
  5. Buradan sonra, hangi sürümlerin bir TinyMCE güncellemesine sahip olduğunu görmek için her Joomla sürümü için sürüm notlarını gözden geçirerek oldukça uzun zaman geçirdim. Yapanlar, ben switchdaha fazla kod kendi blok ekledi . Bu yaklaşım, 2 sürüm dışında tam sürümü vermeyecek, ancak ortalama verecektir. JQuery sürümünü tespit etmeyi düşünüyordum, ancak daha sonra birçok insanın çekirdek sürümü en son sürüme güncellediğini fark etti ve bu da sonuçların yanlış olmasını sağlayacaktır.
  6. TinyMCE sürümü bulunamazsa (temel olarak Joomla olmayan bir site), işlev geri döner Unknown.

Not: Bu komut dosyası kullanır, CURLbu nedenle sunucunuzda etkinleştirildiğinden emin olun.


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;
    }

}

Sonra işlevi şöyle çağırın:

$version = new JoomlaVersions;
echo $version->getJoomlaVersion('http://joomla.org');

Web sitemde diğer kullanıcılar için bir Araç olarak bir modül oluşturdum:

Joomla Sürüm Tespit Aracı

Çatallamak veya çekme istekleri göndermek isterseniz de bir Github deposu oluşturdum:

Joomla Sürümü Algılama Github Repo

Her neyse, bazılarınızın bildiği gibi, ben bir arka uç geliştirici değilim, bu yüzden muhtemelen kodda yapılabilecek birçok iyileştirme var. Başka bir çözümünüz varsa veya şu anda sahip olduğumu güncelleyebiliyorsanız, yeni bir yanıt olarak gönderdiğinizden emin olun.


harika bir çözüm! Her neyse, /administrator/manifests/files/joomla.xml dosyasına erişiminiz olduğu anlamına gelir. Yani bu her zaman böyle değildir. Bahsedilen diğer sayfada, yalnızca / sayfanın GET'indeki sürümü algılayan bir çözüm bulunur. Yani bunun nasıl yapıldığı tam olarak belli değil. Apache günlükleri yalnızca alan adına basit bir erişim sağlar.
hkais

1
Cevaba bir Github veri havuzu bağlantısı ekledim.
Lodder

Mükemmel cevap da sorduğum soruya yardımcı olur joomla.stackexchange.com/q/182/120
Neil Robertson

@Joomjunk Birkaç Joomla sitesini kontrol etmek için sitenizdeki komut dosyasını denedim. Çalışmıyor. Yanıt boş.

@Marc - Bazı siteler çalışır, diğerleri ana makinenin belirli XML dosyaları için okuma izinlerine izin vermemesi nedeniyle sürüm algılamamın çalışmasıdır. Sürümü algılamak için farklı yöntemler kullanan başka bir site var, ancak bunu nasıl yaptıkları konusunda emin değilim. Bunu yapmanın daha uygun bir yolunu bulabilirsem, uygulayacağım.
Lodder

3

Yalnızca yönettiğiniz sitelerin sürümleriyle ilgileniyorsanız , örneğin eklenti URL'sini açarak Joomla sürümünü paylaşan küçük bir eklenti oluşturabilir ve yükleyebilirsiniz.
http://example.com/plugins/getversion/getversion.php?configuredSecret

  • Henüz ihtiyacım yoktu bu yüzden kodu yok. Ama dayalı LODDER cevabı , okumak nasıl görebilirsiniz Joomla! mainfest dosyası /administrator/manifests/files/joomla.xmlsürüm numarasını döndürmek için.

Çoğunlukla yeni başlayanlar için not: configuredSecretherkes tarafından görülebilir kanalı yalnızca yetkili isteklerle paylaşmak için klasik yaklaşımlardan biridir. Entegre bağlantıyı korumanın daha iyi bir yolu yoksa, genellikle iki sistemi bağlamak için kullanılır.


joomla 2.5 için yönetici / manifests / files / joomla.xml cevaptır
Lynob

@Lynob - tabi. Bu durumda, OP, XML dosyasının tamamını değil, yalnızca tek bir sayı alan hafif bir uygulamaya sahip olmak ister. Bu nedenle çözümünüz, ince istemci için benim çözümüm şişman müşteri için uygundur.
miroxlav

0

Tam olarak bir kod çözümü olmadığı için bunu ayrı bir cevap olarak ekleyeceğim.

2 XHR isteği gerçekleştiren bir Firefox uzantısı geliştirdim. En son sürümü alan ilk Joomla API sitesine, diğeri görüntülemekte olduğunuz joomla.xmlmevcut web sitesinin dosyasına. Daha sonra iki sürümü ve console.log()sonucu karşılaştırır.

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.