Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Hình ảnh trong MySQL

Như đã nói trước đây, blob Tuy nhiên, đó là cách để đi, như SanHolo chỉ ra rằng nó không thực sự hiệu quả về mặt hiệu suất và cuối cùng bạn sẽ gặp phải vấn đề vì cơ sở dữ liệu của bạn có thể phát triển rất nhanh!

Tại sao bạn không lập chỉ mục tên tệp trên cơ sở dữ liệu và lưu trữ tệp trên máy chủ ?

Lý do chính để không cho phép một cái gì đó như thế này sẽ là các vấn đề bảo mật. Nếu bạn thực sự đang cố che đậy căn cứ của mình bằng cách không cho phép tất cả người dùng xem hoặc lấy nội dung, bạn có hai lựa chọn.

Tùy chọn A) đặt cho tệp một tên duy nhất, không thể nhận dạng như Flickr. Tên của tệp có hai hàm băm. Một hàm băm của người dùng và một hàm băm tệp. Hàm băm thứ hai là bí mật và cách duy nhất bạn có thể lấy nó là thử và sai. Hãy xem tệp này tôi có trên Flickr . Được bảo vệ bởi người dùng (chỉ gia đình mới có thể xem) nhưng bạn sẽ có thể truy cập nó tốt vì chính URL đóng vai trò bảo vệ: http://farm2.static.flickr.com/1399/862145282_bf83f25865_b.jpg , ngay cả khi bạn ngẫu nhiên cố gắng tạo các băm và tìm thấy một mã hợp lệ, nó sẽ được ẩn danh vì bạn sẽ không biết nó đến từ ai.

Tùy chọn B) sử dụng công nghệ phía máy chủ để giới hạn quyền truy cập. Phương pháp này an toàn hơn nhưng tốn kém hơn đối với máy chủ. Bạn sẽ thiết lập một tập lệnh cho phép / từ chối quyền truy cập vào tệp dựa trên session_permissions hoặc một cái gì đó tương tự. Hãy xem đoạn mã sau sẽ được gọi bằng cách truy cập vào một cái gì đó như:

http://yourserver.com/getprotectedfile.php?filename=213333.jpeg

session_start();

// logic to verify the user is ok
if($_SESSION['user_access']!=true) {
    exit('user not allowed here');

// WATCHOUT! THIS IS NOT SECURE! EXAMPLE ONLY.
// on a production site you have to be sure that $filename will not point to a system file
$filename = $_GET['filename'];

// gets the file and outputs it to the user
header('Content-type: image/jpeg');
header('Content-Length: '.filesize($filename));
readfile($filename);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để cho phép khách hàng đăng nhập vào trang web của bạn bằng tài khoản Google của họ?

  2. MySQL chọn các hàng trong đó tham gia bên trái là rỗng

  3. MySQL tìm kiếm giá trị json theo khóa trong mảng

  4. Menu đệ quy phân cấp với PHP / MySQL

  5. Truy vấn con MySQL trả về nhiều hơn một hàng