web-gelistirme-sc.com

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

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. Örneğin. 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.

11
hkais

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

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

  1. http:// öneki URL'de yok. Öyleyse, ekler. Bu durumda https:// dikkate almak.
  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> etiket.
  4. XML dosyası okunamıyorsa, TinyMCE sürümünü almak için bir yedek yazdım. Yine, <version> etiket.
  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, switch bloğuna daha fazla kod ekledim. 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 Unknown döndürür.

Not: Bu komut dosyası CURL kullanıyor, bu 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.

15
Lodder

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

  • Henüz ihtiyacım yoktu bu yüzden kodu yok. Ancak Lodder'ın cevabı temel alınarak, Joomla! mainfest dosyasını /administrator/manifests/files/joomla.xml sürüm numarasını döndürmek için.

Çoğunlukla yeni başlayanlar için not edin: configuredSecret, herkes tarafından görülebilir kanalı yalnızca yetkili isteklerle paylaşmak için kullanılan 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.

3
miroxlav

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 de görüntülediğiniz mevcut web sitesinin joomla.xml Dosyasına. Daha sonra iki sürümü karşılaştırır ve console.log() sonucu.

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

0
Lodder