Làm thế nào để có được phiên bản Joomla bằng http?


11

Tôi đã thấy ảnh chụp màn hình của một giải pháp, ở đó phiên bản Joomla đang được phát hiện bằng cách chỉ truy cập trang qua http.

Ví dụ: giải pháp hiển thị cả 3 chữ số của một phiên bản Joomla. ví dụ: 2.5.28 hoặc 1.0.x, v.v. bằng cách chỉ truy cập trang web qua http.

Tôi muốn tạo một ứng dụng nhỏ để được thông báo về phiên bản được cài đặt trên máy chủ. Vì tôi không phải lúc nào cũng có quyền truy cập đầy đủ vào bộ lưu trữ FTP, tôi muốn biết làm thế nào tôi có thể trích xuất phiên bản Joomla từ một HTTP GET đơn giản.


Bạn đang đề cập đến trang web của riêng bạn hoặc một trang web bên ngoài. Nếu bên ngoài, thì điều này không thể được thực hiện
Lodder


@Farahmand - Các liên kết được cung cấp sẽ không giúp được gì cho phiên bản chính xác, chẳng hạn như 2.5.28 . Chỉ các số phiên bản chính như 1.52.5
Lodder

@Lodder - Vui lòng kiểm tra liên kết này: whitefirdesign.com/tools/j Joomla-version-check.html hiển thị phiên bản chính xác.
Farahmand

@Lodder - Tôi đã kiểm tra liên kết và nó hoạt động cho các phiên bản Joomla 2.5 nhưng không hoạt động đối với một số phiên bản Joomla 3.
Farahmand

Câu trả lời:


15

Ok, đây là những gì tôi đã viết ngày hôm qua.

Chỉ dành cho Joomla 2.5 và 3.x

  1. Kiểm tra nếu http://thiếu tiền tố từ URL. Nếu có, thì nó thêm nó. Lưu ý rằng trong trường hợp này tôi đã không đưa https://vào xem xét.
  2. Sau đó, nó cố gắng lấy tệp kê khai Joomla và kiểm tra xem có tồn tại / có thể đọc được không.
  3. Nếu nó tồn tại thì nó nhận được giá trị từ <version>thẻ.
  4. Nếu tệp XML không thể đọc được, thì tôi đã viết một bản dự phòng để có phiên bản TinyMCE. Một lần nữa, nó sẽ cố gắng đọc giá trị từ <version>thẻ.
  5. Từ đây trở đi, tôi đã dành khá nhiều thời gian để xem các ghi chú phát hành cho từng phiên bản Joomla để xem phiên bản nào có bản cập nhật TinyMCE. Những người đã làm, tôi đã thêm vào switchkhối sở hữu thêm trong mã. Cách tiếp cận này sẽ không cung cấp phiên bản chính xác ngoài 2 trong số chúng, nhưng nó sẽ cho mức trung bình. Tôi đã suy nghĩ về việc phát hiện phiên bản jQuery nhưng sau đó nhận ra rằng rất nhiều người cập nhật phiên bản cốt lõi lên phiên bản mới nhất, điều này sẽ khiến kết quả không chính xác.
  6. Nếu không thể tìm thấy phiên bản TinyMCE (về cơ bản là một trang web không phải Joomla), thì chức năng sẽ trở lại Unknown.

Lưu ý: Tập lệnh này sử dụng CURLđể đảm bảo rằng nó được bật trên máy chủ của bạn.


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

}

Sau đó gọi hàm như vậy:

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

Tôi đã tạo một mô-đun trên trang web của mình dưới dạng Công cụ cho những người dùng khác:

Công cụ phát hiện phiên bản Joomla

Tôi cũng đã tạo một kho lưu trữ Github nếu bạn muốn rẽ nhánh hoặc gửi yêu cầu kéo:

Phiên bản Joomla Phát hiện Github Repo

Dù sao, như một số bạn biết, tôi không phải là nhà phát triển phụ trợ nên có thể có rất nhiều cải tiến có thể được thực hiện đối với mã. Nếu bạn có một giải pháp khác hoặc có thể cập nhật những gì tôi hiện đang có, hãy chắc chắn đăng nó dưới dạng một câu trả lời mới.


giải pháp tuyệt vời! Dù sao, nó ngụ ý rằng bạn có quyền truy cập vào tập tin /ad Administrator / manifests / files / j Joomla.xml. Vì vậy, đây không phải là luôn luôn như vậy. Trang được đề cập khác có một giải pháp, chỉ phát hiện phiên bản trên GET của trang /. Vì vậy, nó hoàn toàn không rõ làm thế nào điều này được thực hiện. Nhật ký apache chỉ nói một cách đơn giản đến / của tên miền, không có gì hơn.
hkais

1
Tôi đã thêm một liên kết kho Github vào câu trả lời.
Lodder

Câu trả lời tuyệt vời cũng giúp trả lời câu hỏi tôi đã hỏi tại j Joomla.stackexchange.com/q/182/120
Neil Robertson

@Joomjunk Tôi đã thử tập lệnh trên trang web của bạn để kiểm tra một số trang web Joomla. Không làm việc. Phản hồi trống rỗng.

@Marc - Một số trang web hoạt động, một số trang web khác sẽ không do máy chủ không cho phép đọc các tệp XML nhất định, đó là cách phát hiện phiên bản của tôi hoạt động. Có một trang web khác sử dụng các phương pháp khác nhau để phát hiện phiên bản, tuy nhiên tôi không chắc chắn về cách họ thực hiện việc này. Nếu tôi có thể tìm ra một cách thích hợp hơn để làm điều này, tôi sẽ thực hiện nó.
Lodder

3

Nếu bạn chỉ quan tâm đến các phiên bản trang web bạn quản lý , thì bạn có thể tạo và cài đặt một plugin nhỏ chia sẻ phiên bản Joomla bằng cách mở URL plugin, ví dụ:
http://example.com/plugins/getversion/getversion.php?configuredSecret

  • Tôi chưa cần nó vì vậy tôi không có mã. Nhưng dựa trên câu trả lời của Lodder , bạn có thể thấy cách đọc Joomla! tập tin mainfest /administrator/manifests/files/joomla.xmlđể trả về số phiên bản.

Lưu ý chủ yếu cho người mới: configuredSecretlà một trong những cách tiếp cận cổ điển để chỉ chia sẻ kênh hiển thị công khai cho các yêu cầu được ủy quyền. Nó thường được sử dụng để kết nối hai hệ thống nếu không có cách nào tốt hơn để bảo vệ tích hợp kết nối.


quản trị viên / tệp kê khai / tệp / j Joomla.xml là câu trả lời, cho
j

@Lynob - chắc chắn rồi. Trong trường hợp này, OP muốn có ứng dụng nhẹ chỉ nhận được một số duy nhất, không phải toàn bộ tệp XML. Vì vậy, giải pháp của bạn là phù hợp cho khách hàng chất béo, giải pháp của tôi cho khách hàng mỏng.
miroxlav

0

Tôi sẽ thêm câu này dưới dạng một câu trả lời riêng biệt, vì nó không chính xác là một giải pháp mã.

Tôi đã phát triển một tiện ích mở rộng Firefox thực hiện 2 yêu cầu XHR. Phiên bản đầu tiên vào trang web Joomla API để có phiên bản mới nhất, phiên bản khác cho joomla.xmltệp của trang web hiện tại bạn đang xem. Sau đó sẽ so sánh hai phiên bản và console.log()kết quả.

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.