Bagaimana cara mendapatkan versi joomla dengan http?

11

Saya telah melihat tangkapan layar sebuah solusi, di sana versi Joomla terdeteksi dengan hanya mengakses halaman melalui http.

Misalnya solusi ditampilkan semua 3 digit versi Joomla. misalnya 2.5.28, atau 1.0.x dan seterusnya dengan hanya mengakses halaman web melalui http.

Saya ingin membuat aplikasi kecil untuk mendapat informasi tentang versi yang diinstal pada server. Karena saya tidak selalu memiliki akses penuh ke penyimpanan FTP, saya ingin tahu bagaimana saya dapat mengekstrak versi Joomla dari HTTP GET yang sederhana.

hkais
sumber
Apakah Anda merujuk ke situs web Anda sendiri atau situs web eksternal. Jika eksternal, maka ini tidak dapat dilakukan
Lodder
@Farahmand - Tautan yang disediakan tidak akan membantu untuk versi yang tepat, seperti 2.5.28 . Hanya nomor versi utama seperti 1,5 dan 2,5
Lodder
@Lodder - Silakan periksa tautan ini: whitefirdesign.com/tools/joomla-version-check.html yang menunjukkan versi persisnya.
Farahmand
@Lodder - Saya memeriksa tautannya dan berfungsi untuk versi Joomla 2.5 tetapi tidak berfungsi untuk beberapa versi Joomla 3.
Farahmand

Jawaban:

15

Ok jadi ini yang saya tulis kemarin.

Hanya untuk Joomla 2.5 dan 3.x

  1. Periksa apakah http://awalan hilang dari URL. Jika ya, maka ia menambahkannya. Perhatikan bahwa Dalam hal ini saya telah tidak mengambil https://menjadi pertimbangan.
  2. Kemudian mencoba untuk mendapatkan file manifes Joomla dan memeriksa apakah ada / dapat dibaca.
  3. Jika ada maka mendapat nilai dari <version>tag.
  4. Jika file XML tidak dapat dibaca, maka saya telah menulis mundur untuk mendapatkan versi TinyMCE. Sekali lagi, ini akan mencoba membaca nilai dari <version>tag.
  5. Dari sini, saya menghabiskan cukup banyak waktu untuk membaca catatan rilis untuk setiap versi Joomla untuk melihat versi mana yang memiliki pembaruan TinyMCE. Mereka yang melakukannya, saya menambahkan ke switchblok lebih lanjut dalam kode. Pendekatan ini tidak akan memberikan versi yang tepat terpisah dari 2 di antaranya, tetapi akan memberikan rata-rata. Saya sedang berpikir tentang mendeteksi versi jQuery tetapi kemudian menyadari bahwa banyak orang memperbarui versi inti ke yang terbaru yang kemudian akan membuat hasilnya tidak akurat.
  6. Jika versi TinyMCE tidak dapat ditemukan (jadi pada dasarnya situs non-Joomla), maka fungsinya akan kembali Unknown.

Catatan: Script ini digunakan CURLjadi pastikan diaktifkan di server Anda.


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

}

Kemudian panggil fungsi seperti ini:

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

Saya telah membuat modul di situs web saya sebagai Alat untuk pengguna lain:

Alat Deteksi Versi Joomla

Saya juga membuat repositori Github jika Anda ingin membayarnya atau mengirimkan permintaan tarikan:

Versi Joomla Mendeteksi Github Repo

Bagaimanapun, seperti beberapa dari Anda tahu, saya bukan pengembang backend jadi mungkin ada banyak perbaikan yang dapat dilakukan pada kode. Jika Anda memiliki solusi lain atau dapat memperbarui apa yang saya miliki saat ini, pastikan untuk mempostingnya sebagai jawaban baru.

Lodder
sumber
solusi hebat! Bagaimanapun itu menyiratkan, bahwa Anda memiliki akses ke file /administrator/manifests/files/joomla.xml. Jadi ini tidak selalu terjadi. Halaman lain yang disebutkan memiliki solusi, yang mendeteksi versi hanya pada GET halaman /. Jadi tidak sepenuhnya jelas bagaimana hal ini dilakukan. Log apache hanya memberi tahu tentang domain, tidak lebih dari itu.
hkais
1
Saya telah menambahkan tautan repositori Github ke jawabannya.
Lodder
Jawaban luar biasa yang juga membantu menjawab pertanyaan yang saya ajukan di joomla.stackexchange.com/q/182/120
Neil Robertson
@Joomjunk Saya mencoba skrip di situs Anda untuk memeriksa beberapa situs Joomla. Tidak bekerja Responsnya kosong.
@ Mark - Beberapa situs berfungsi, yang lain tidak akan karena host tidak mengizinkan izin baca untuk file XML tertentu yang merupakan cara deteksi versi saya bekerja. Ada situs lain yang menggunakan metode berbeda untuk mendeteksi versi, namun saya tidak yakin bagaimana mereka melakukan ini. Jika saya bisa mencari cara yang lebih tepat untuk melakukan ini, saya akan menerapkannya.
Lodder
3

Jika Anda hanya tertarik pada versi situs yang Anda kelola , maka Anda dapat membuat dan menginstal plugin kecil yang berbagi versi Joomla dengan membuka URL plugin, misalnya
http://example.com/plugins/getversion/getversion.php?configuredSecret

  • Saya belum membutuhkannya jadi saya tidak punya kode. Tetapi berdasarkan jawaban Lodder , Anda dapat melihat cara membaca Joomla! file mainfest /administrator/manifests/files/joomla.xmluntuk mengembalikan nomor versi.

Catatan sebagian besar untuk pemula: configuredSecretadalah salah satu pendekatan klasik untuk berbagi saluran yang dapat dilihat secara publik hanya untuk permintaan resmi. Ini biasanya digunakan untuk menghubungkan dua sistem jika tidak ada cara yang lebih baik untuk melindungi koneksi yang terintegrasi.

miroxlav
sumber
administrator / manifests / files / joomla.xml adalah jawabannya, setidaknya untuk joomla 2.5
Lynob
@Lynob - tentu. Dalam hal ini, OP ingin memiliki aplikasi ringan yang hanya menerima satu nomor, bukan seluruh file XML. Jadi solusi Anda cocok untuk klien gemuk, solusi saya untuk klien kurus.
miroxlav
0

Saya akan menambahkan ini sebagai jawaban terpisah, karena ini bukan solusi kode.

Saya telah mengembangkan ekstensi Firefox yang melakukan 2 permintaan XHR. Yang pertama ke situs Joomla API untuk mendapatkan versi terbaru, yang lain ke joomla.xmlfile situs web saat ini yang Anda lihat. Kemudian akan membandingkan dua versi dan console.log()hasilnya.

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

Lodder
sumber