2012-02-13 29 views
5

Tôi đang xây dựng một trang web và vừa mới bắt đầu phát triển chương trình phụ trợ.Cách lưu trữ tệp hình ảnh trong phần phụ trợ của trang web

Điểm của trang web của tôi sẽ hiển thị hình ảnh cho khách truy cập. Vì mục đích phát triển, tôi muốn kiểm tra mọi thứ trước khi phát trực tiếp.

Tôi muốn biết cách lưu trữ những hình ảnh này tốt nhất là gì. Tôi vừa hoàn tất việc thiết lập máy chủ Wamp của mình và thêm một db mới với phpMyAdmin. Tôi thấy rằng tôi có thể lưu trữ từng hình ảnh trực tiếp trong cơ sở dữ liệu mySQL dưới dạng kiểu dữ liệu BLOB. Nhưng đây có phải là cách tốt nhất để đi không?

Cảm ơn bạn!

Trả lời

7

Đây chắc chắn không phải là cách để đi. Sau đó, bạn sẽ cần giữ cho blob trong bộ nhớ bằng PHP trước khi gửi nó đến trình duyệt.

Cách tiếp cận tốt hơn là lưu trữ hình ảnh dưới dạng tệp trong hệ thống tệp và chỉ lưu trữ tên tệp trong cơ sở dữ liệu của bạn. theo cách đó, bạn có thể tải toàn bộ hình ảnh xuống máy chủ web và không bao giờ liên quan đến PHP trong các yêu cầu HTTP cho tệp.

5

Lưu trữ file vào cơ sở dữ liệu có hai ưu điểm chính:

  1. an toàn giao dịch. Nếu người dùng chỉnh sửa tiểu sử của anh ấy (pic & ngày sinh), thì cả hai đều được lưu hoặc không trong trường hợp xảy ra lỗi rollback/lỗi.

  2. Chỉ một điểm sao lưu. Nó sẽ không xảy ra với bạn để quên sao lưu thư mục chứa avatar người dùng.

Tuy nhiên, do nhiều cạm bẫy, tôi không khuyên bạn nên nó, đặc biệt là không sử dụng PHP & MySQL. MySQL không hỗ trợ phát trực tuyến, vì vậy trong trường hợp tệp lớn, bạn sẽ sử dụng hết tất cả các tệp ram của mình.

Hệ thống tệp hoàn toàn là cách nhanh nhất và tự nhiên nhất. Nó có chi phí thấp nhất và ít tốn kém nhất.

đọc:

Storing a file in a database as opposed to the file system?

Storing Documents as Blobs in a Database - Any disadvantages?

0

Bạn có thể lưu trữ chúng trong DB sau đó dễ dàng thao tác hình ảnh. Ví dụ: bạn có thể chụp ảnh gốc từ DB và tạo một số hình ảnh bộ nhớ cache (trên đĩa) với các kích thước khác nhau (sử dụng imagick) và hiển thị chúng trong trang web. Nếu u đang sử dụng DB, bạn nên sử dụng tải chậm khi chụp ảnh (tải nội dung chỉ khi bạn cần) mysql khác sẽ sụp đổ máy chủ của bạn. :)

Bạn có thể tạo một dir /cache/pictures/$id_$width_$height.jpg và lưu trữ chúng ở đó. Và chỉ tạo hình ảnh mới nếu không tìm thấy $ id_ $ width_ $ height.

0

Tôi, cá nhân, sẽ không đề xuất lưu trữ tệp trong cơ sở dữ liệu. Tôi sẽ lưu trữ các tham chiếu đến vị trí của các tệp để nó có thể mở rộng trong tương lai nếu cần thiết thông qua các gương, v.v.

Các vấn đề liên quan