Tại sao get.php và / hoặc `core / file_st Storage_database` được tạo?


12

Kể từ khoảng phiên bản 1.5 hoặc 1.6, Magento đã có một tệp trong thư mục gốc có tên get.php. Tệp này, sử dụng core/file_storage_datamô hình, cho phép chủ sở hữu hệ thống Magento phân phát tệp phương tiện sản phẩm của họ trực tiếp từ các cột blob trong cơ sở dữ liệu mà không cần có tệp hình ảnh trên hệ thống tệp. PHP xử lý việc gửi tệp

#File: get.php
function sendFile($file)
{
    if (file_exists($file) || is_readable($file)) {
        $transfer = new Varien_File_Transfer_Adapter_Http();
        $transfer->send($file);
        exit;
    }
}

Đây là đi vào lãnh thổ lịch sử Magento, nhưng tại sao tính năng này được phát triển? Có vẻ như - hơi điên rồ. PHP không phải là cách hiệu quả nhất để phục vụ tệp, bộ lưu trữ blob của MySQL có lịch sử không ổn định và ngay cả việc triển khai cơ sở dữ liệu ổn định cũng là một vấn đề khó khăn để làm việc và từ những gì tôi có thể thấy Varien_File_Transfer_Adapter_Httpkhông thêm vào bất kỳ tiêu đề bộ nhớ đệm cho các tập tin này.

Có ai biết tại sao Magento phát triển tính năng này? Liệu nó thực sự hoàn thành bất cứ mục tiêu / vấn đề nào nó đặt ra để giải quyết? Có ai đang sử dụng nó?

Câu trả lời:


12

Tôi thực sự đã tìm thấy SRS ban đầu cho tính năng này và có thể chia sẻ nó ở đây cho các mục đích lịch sử:

Hiện tại không có tùy chọn khác để lưu trữ phương tiện, nhưng trong hệ thống tệp của máy chủ web. Cách tiếp cận này đủ tốt khi chỉ có một phiên bản của hệ thống đang chạy và cơ sở dữ liệu được đặt trên cùng một máy chủ với thể hiện của hệ thống.

Tuy nhiên, cách có khả năng nhất để triển khai hệ thống không giống nhau. Khách hàng có nhiều phiên bản của hệ thống được triển khai trên các máy chủ khác nhau, yêu cầu đồng bộ hóa. Đây là lý do tại sao, hai tùy chọn lưu trữ hình ảnh khác nhau sẽ được phát triển dưới dạng tùy chọn: Cơ sở dữ liệu và CDN (Mạng phân phối nội dung).

CDN dưới dạng lưu trữ phương tiện thay thế sẽ chỉ được triển khai trong hệ thống dưới dạng tùy chọn hỗ trợ, chứ không phải là tích hợp đầy đủ với (các) CDN cụ thể. Quản trị viên sẽ phải tự chọn và định cấu hình CDN cũng như thực hiện các thay đổi nhỏ trong cấu hình hệ thống.

Tôi sẽ không dán các trường hợp sử dụng nhưng đối với CDN, nó chỉ đề cập đến việc thay đổi URL cơ sở cho hình ảnh / giao diện thành url CDN (tôi giả sử nó yêu cầu PULL CDN)


3

Tôi đã không thử nghiệm nó một cách rộng rãi, cũng không sử dụng nó trong sản xuất, nhưng đã sử dụng nó cho hướng dẫn đàn hồi Beanstalk + Magento của tôi. Lợi ích dành cho cụm nút web không chia sẻ - các tệp hình ảnh được lưu trữ trong phụ trợ DB khi được tải lên qua quản trị viên, sau đó được phân phát ban đầu từ đó (và lý tưởng nhất là từ CDN sau đó). Nó có nghĩa là bạn có thể tránh NFS để chia sẻ phương tiện truyền thông.


2

Tôi đoán ở đây là nó được dành cho môi trường cụm. Nhiều mã web với nút 1 db. Nếu phiên / bộ đệm cũng nằm trong db (hoặc nút khác), mã web của bạn sẽ chỉ được đọc và bạn không phải đồng bộ hóa phương tiện bất cứ khi nào bạn đưa ra một mã web mới.

Nhìn chung, tôi đồng ý rằng nó trông giống như một giải pháp kỹ thuật đang tìm kiếm một vấn đề cần giải quyết.


2

Cá nhân tôi rất vui khi thấy điều này trong Magento, bởi vì (như những người khác đang đề cập), nó cung cấp một cách để các ngăn xếp có nhiều nút web có một nguồn hình ảnh có thẩm quyền duy nhất mà không phải xử lý các mount NFS.

Nếu bạn giống tôi và chạy triển khai bằng cách thay thế các nút web vào và ra khỏi bộ cân bằng tải (chẳng hạn như sử dụng Cấu hình khởi chạy AWS / Nhóm tự động mở rộng quy mô), thì điều này thực sự khá lành mạnh.

Thông thường, bạn muốn tránh đưa hình ảnh vào DB vì nhiều lý do, nhưng cách mà quá trình này (về cơ bản) hoạt động là hình ảnh được kéo vào hệ thống tệp cục bộ từ DB, và sau đó được phục vụ từ đó cho các yêu cầu tiếp theo .

Nếu bạn có thể tiến thêm một bước (vì vậy thậm chí còn ít yêu cầu kéo hình ảnh xuống / tham chiếu từ hệ thống tệp) Tôi khuyên bạn nên sử dụng CDN và đặt trang web của bạn làm nguồn gốc và thay đổi URL phương tiện như những người khác mô tả.

Mặt khác, hầu hết các cấu hình MySQL sẽ có giá trị "max_allowed_packet" rất thấp, giới hạn kích thước truyền dữ liệu được phép vào DB của bạn. Nếu bạn dự định lưu trữ hình ảnh trong DB, bạn có thể muốn kiểm tra xem nó để bạn không tự bắn vào chân mình.

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.