it-mot-dan-vi.com

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

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. chỉ bằng cá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.

11
hkais

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 xem http:// tiền tố bị thiếu trong URL. Nếu có, thì nó thêm nó. Lưu ý rằng trong trường hợp này, tôi đã không lấy 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> nhãn.
  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ố đọc giá trị từ <version> nhãn.
  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 khối switch 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ì hàm sẽ trả về Unknown.

Lưu ý: Tập lệnh này sử dụng CURL vì vậy hãy đả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ó lẽ 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.

15
Lodder

Nếu bạn chỉ quan tâm đến các phiên bản của 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ể xem cách đọc Joomla ! tệp mainfest /administrator/manifests/files/joomla.xml để trả về số phiên bản.

Lưu ý chủ yếu cho người mới: configuredSecret là 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.

3
miroxlav

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 tệp joomla.xml Của trang web hiện tại bạn đang xem. Sau đó, nó 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

0
Lodder