Http द्वारा जूमला संस्करण कैसे प्राप्त करें?


11

मैंने एक समाधान के स्क्रीनशॉट देखे हैं, वहाँ केवल Joomla संस्करण http के माध्यम से पृष्ठ तक पहुँचने से पता लगाया जा रहा है।

जैसे कि समाधान ने जूमला के एक संस्करण के सभी 3 अंकों को प्रदर्शित किया। उदाहरण के लिए 2.5.28, या 1.0.x और इतने पर ही http के माध्यम से वेबपेज को एक्सेस करके।

मैं सर्वर पर स्थापित संस्करण के बारे में सूचित करने के लिए एक छोटा अनुप्रयोग बनाना चाहता हूं। चूंकि मेरे पास हमेशा एफ़टीपी स्टोरेज की पूरी पहुंच नहीं है, इसलिए मैं यह जानना चाहूंगा कि मैं एक सरल HTTP टीईटी से जूमला संस्करण कैसे निकाल सकता हूं।


क्या आप अपनी खुद की वेबसाइट या किसी बाहरी वेबसाइट का जिक्र कर रहे हैं। यदि बाहरी है, तो यह नहीं किया जा सकता है
Lodder


@ फराहमांड - दिए गए लिंक 2.5.28 जैसे सटीक संस्करण के लिए कोई मदद नहीं करेंगे । केवल मुख्य संस्करण संख्या जैसे कि 1.5 और 2.5
Lodder

@ लॉडर - कृपया इस लिंक को देखें: whitefirdesign.com/tools/joomla-version-check.html जो सटीक संस्करण दिखाता है।
फराहमंद

@ लॉडर - मैंने लिंक की जाँच की और यह जूमला 2.5 संस्करणों के लिए काम करता है, लेकिन कुछ जूमला 3 संस्करणों के लिए काम नहीं करता है।
फरहमानंद

जवाबों:


15

ठीक है तो यह वही है जो मैं कल लिख रहा था।

केवल जूमला 2.5 और 3.x के लिए

  1. जांचें कि क्या http://उपसर्ग URL से गायब है। यदि यह है, तो यह इसे जोड़ता है। ध्यान दें कि इस मामले में मैंने ध्यान नहींhttps:// दिया है।
  2. यह तब जूमला मैनिफ़ेस्ट फ़ाइल प्राप्त करने की कोशिश करता है और जाँचता है कि क्या मौजूद है / पठनीय है।
  3. यदि यह मौजूद है तो यह <version>टैग से मूल्य प्राप्त करता है ।
  4. यदि XML फ़ाइल पढ़ने योग्य नहीं है, तो मैंने TinyMCE संस्करण प्राप्त करने के लिए एक कमबैक लिखा है। फिर, यह <version>टैग से मान पढ़ने की कोशिश करेगा ।
  5. यहाँ से, मैंने प्रत्येक जूमला संस्करण के रिलीज़ नोट्स से गुजरने में काफी समय बिताया, यह देखने के लिए कि किन संस्करणों में टिनीएमसीई अपडेट है। उन लोगों ने जो किया, मैंने 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');

मैंने अपनी वेबसाइट पर अन्य उपयोगकर्ताओं के लिए एक टूल के रूप में एक मॉड्यूल बनाया है:

जूमला वर्जन डिटेक्शन टूल

यदि आपने इसे कांटा या पुल अनुरोध सबमिट करना चाहते हैं, तो मैंने एक गितब भंडार भी बनाया है:

जूमला वर्जन जीथब रेपो का पता लगाता है

वैसे भी, जैसा कि आप में से कुछ जानते हैं, मैं बैकएंड डेवलपर नहीं हूं, इसलिए शायद बहुत सारे सुधार हैं जो कोड में किए जा सकते हैं। यदि आपके पास एक और समाधान है या जो मेरे पास वर्तमान में है, उसे अपडेट कर सकते हैं, तो एक नए उत्तर के रूप में पोस्ट करना सुनिश्चित करें।


महान समाधान! वैसे भी इसका तात्पर्य है, कि आपके पास /administrator/manifests/files/joomla.xml फ़ाइल तक पहुँच है। इसलिए हमेशा ऐसा नहीं होता है। अन्य उल्लिखित पृष्ठ में एक समाधान है, जो केवल / पृष्ठ के GET पर संस्करण का पता लगाता है। तो यह पूरी तरह से स्पष्ट नहीं है कि यह कैसे किया जाता है। अपाचे लॉग केवल डोमेन के लिए एक सरल मिलता है, और कुछ नहीं।
हकीस

1
मैंने उत्तर में एक Github रिपॉजिटरी लिंक जोड़ा है।
लोडर

उत्कृष्ट उत्तर जो मुझे joomla.stackexchange.com/q/182/120
नील रॉबर्टसन

@ जूमजंक मैंने कई जूमला साइटों की जांच करने के लिए आपकी साइट पर स्क्रिप्ट की कोशिश की। काम नहीं कर रहा। प्रतिक्रिया खाली है।

@Marc - कुछ साइटें काम करती हैं, अन्य होस्ट के कारण कुछ XML फ़ाइलों के लिए पढ़ने की अनुमति नहीं देते हैं जो कि मेरे संस्करण का पता लगाने का काम करता है। एक और साइट है जो संस्करण का पता लगाने के लिए विभिन्न तरीकों का उपयोग करती है, हालांकि मैं अनिश्चित हूं कि वे यह कैसे करते हैं। यदि मैं इसे करने के अधिक उपयुक्त तरीके का पता लगा सकता हूं, तो मैं इसे लागू करूंगा।
लोडर

3

यदि आप केवल उन साइटों के संस्करणों में रुचि रखते हैं, जिन्हें आप प्रबंधित करते हैं , तो आप एक छोटा प्लगइन बना सकते हैं और स्थापित कर सकते हैं, जो उदाहरण के लिए प्लगइन URL खोलकर जूमला संस्करण साझा करता है।
http://example.com/plugins/getversion/getversion.php?configuredSecret

  • मुझे इसकी आवश्यकता नहीं थी फिर भी मेरे पास कोड नहीं है। लेकिन लोडर के जवाब के आधार पर , आप देख सकते हैं कि जूमला कैसे पढ़ें ! /administrator/manifests/files/joomla.xmlसंस्करण संख्या वापस करने के लिए मुख्य फ़ाइल ।

ज्यादातर नोटों के लिए नोट करें: configuredSecretकेवल आधिकारिक अनुरोधों के लिए सार्वजनिक रूप से दृश्यमान चैनल को साझा करने के लिए शास्त्रीय दृष्टिकोणों में से एक है। यह आमतौर पर दो प्रणालियों को जोड़ने के लिए उपयोग किया जाता है अगर एकीकृत कनेक्शन की रक्षा के लिए कोई बेहतर तरीका नहीं है।


व्यवस्थापक / मैनिफ़ेस्ट / फ़ाइल्स / joomla.xml इसका उत्तर है, जूमला 2.5 के लिए कम से कम
लिनोब

@ लियोनोब - निश्चित। इस मामले में, ओपी को हल्का आवेदन करना होगा जो केवल एकल नंबर प्राप्त करता है, न कि पूरी XML फ़ाइल। तो आपका समाधान वसा ग्राहक के लिए उपयुक्त है, पतले ग्राहक के लिए मेरा समाधान।
miroxlav

0

मैं इसे एक अलग उत्तर के रूप में जोड़ूंगा, क्योंकि यह कोड समाधान नहीं है।

मैंने एक फ़ायरफ़ॉक्स एक्सटेंशन विकसित किया है जो 2 एक्सएचआर अनुरोध करता है। नवीनतम संस्करण प्राप्त करने के लिए पहला जूमला एपीआई साइट, दूसरा joomla.xmlउस वर्तमान वेबसाइट की फ़ाइल जिसे आप देख रहे हैं। यह तब दो संस्करणों और console.log()परिणाम की तुलना करेगा ।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.