Php kiểm tra hình ảnh có hợp lệ không

Các lựa chọn thay thế để lấy MimeType là exif_imagetype và getimagesize, nhưng chúng phụ thuộc vào việc cài đặt các lib thích hợp. Ngoài ra, họ có thể sẽ chỉ trả về các kiểu mô phỏng hình ảnh, thay vì toàn bộ danh sách được đưa ra trong phép thuật. kịch câm

Trong khi mime_content_type có sẵn từ PHP 4. 3 và là một phần của tiện ích mở rộng FileInfo [được bật theo mặc định kể từ PHP 5. 3, ngoại trừ nền tảng Windows, nơi nó phải được bật thủ công, để biết chi tiết xem tại đây]

Nếu bạn không muốn bận tâm về những gì có sẵn trên hệ thống của mình, chỉ cần gói tất cả bốn chức năng vào một phương thức proxy để ủy quyền lệnh gọi hàm cho bất kỳ chức năng nào có sẵn, ví dụ:. g

function getMimeType[$filename]
{
    $mimetype = false;
    if[function_exists['finfo_open']] {
        // open with FileInfo
    } elseif[function_exists['getimagesize']] {
        // open with GD
    } elseif[function_exists['exif_imagetype']] {
       // open with EXIF
    } elseif[function_exists['mime_content_type']] {
       $mimetype = mime_content_type[$filename];
    }
    return $mimetype;
}
function isImage[$image]{
    $extension = pathinfo[$image, PATHINFO_EXTENSION];
    $imgExtArr = ['jpg', 'jpeg', 'png'];
    if[in_array[$extension, $imgExtArr]]{
        return true;
    }
    return false;
}

Hàm này sẽ trả về true hoặc false trên cơ sở phần mở rộng của tệp. Nó trả về true nếu tệp là hình ảnh hoặc trả về false nếu tệp không phải là hình ảnh. Bạn có thể chuyển nhiều phần mở rộng tệp hình ảnh hơn cho biến $imgExtArr

Hầu hết chúng ta sẽ bắt gặp các giải pháp phổ biến trong PHP để kiểm tra xem tệp đã tải lên có phải là hình ảnh hay không, bạn có thể đã thử cách thông thường để kiểm tra các tiện ích mở rộng và chấp nhận tệp là hình ảnh hợp lệ, nếu ai đó nham hiểm tải lên tệp độc hại thì sao? . jpg hoặc. ảnh gif?. Tôi cá là hầu hết chúng ta sẽ sử dụng cách sau để xác thực hình ảnh được tải lên trong PHP

Kiểm tra xem hình ảnh đã tải lên có hợp lệ với getimagesize[] trong PHP

$imagesizedata = getimagesize[$file];
if [$imagesizedata ] {
//do something
}

nhưng các tài liệu PHP nói rằng không sử dụng getimagesize[] để kiểm tra xem một tệp đã cho có phải là một hình ảnh hợp lệ không. đúng là getimagesize[] trả về một mảng với một số giá trị ngẫu nhiên cho chiều cao và chiều rộng của hình ảnh, khi tệp đã cho không phải là hình ảnh hợp lệ

Kiểm tra xem hình ảnh đã tải lên có hợp lệ hay không bằng cách kiểm tra các tiện ích mở rộng

$type=$_FILES[ 'image' ][ 'type' ];     
$extensions=array[ 'image/jpeg', 'image/png', 'image/gif' ];
if[ in_array[ $type, $extensions ]]{
//do something
}

nhưng ở đây bạn chỉ kiểm tra các phần mở rộng, như tôi đã nói trước đó, bất kỳ ai cũng có thể đổi tên tệp có nội dung khác thành jpg hoặc gif và tải chúng lên mà không gặp vấn đề gì

Kiểm tra xem hình ảnh đã tải lên có hợp lệ với dữ liệu exif và fileinfo trong PHP không

Bây giờ, hãy thử một vài thứ để kiểm tra xem hình ảnh đã cho có hợp lệ hay không, nhưng trước khi đi vào ví dụ, hãy để tôi nói cho bạn biết, ngay cả các hàm sau trong PHP cũng sẽ không xác thực hình ảnh một cách chính xác

  • finfo_file[ ]
  • mime_content_type[ ]
  • exif_imagetype[ ]

Tất cả các chức năng trên sẽ trả về loại mime/hình ảnh cho hình ảnh nhất định, nhưng chúng cũng sẽ không thành công nếu chúng tôi tải tệp lên sau khi thay đổi phần mở rộng hoặc gian lận bằng vài byte đầu tiên của tiêu đề hình ảnh. Đây là ví dụ tôi đã nói về. Tôi có nội dung sau trong một tệp và lưu nó dưới dạng motion. gif

GIF89a<

Bạn có thể thử nghiệm với nhiều hình ảnh khác nhau và gian lận với một vài tiêu đề đầu tiên của jpg, gif hoặc png

Làm cách nào để kiểm tra URL hình ảnh có hợp lệ trong PHP không?

Nếu bạn muốn hoàn toàn chắc chắn và PHP của bạn được bật cho kết nối từ xa, bạn chỉ cần sử dụng chức năng "getimagesize['url']" validImage[$url] { . //www. thí dụ. com/hình ảnh. jpg']; Nếu nó trả về một mảng, thì đó là một loại hình ảnh.

Cách kiểm tra tệp có phải là hình ảnh hay không trong PHP?

php /* 1 = Kiểm tra xem tệp đã tải lên có thực sự là một hình ảnh hay không cho dù nó có phần mở rộng nào 2 = Các tệp đã tải lên phải có phần mở rộng hình ảnh cụ thể */ $validation_type = 1;

Làm cách nào chúng ta có thể lấy các thuộc tính của chiều cao chiều rộng loại kích thước hình ảnh bằng cách sử dụng các hàm hình ảnh PHP?

getimagesize[] . Phương pháp này sẽ trả về một lượng dữ liệu hình ảnh hạn chế.

Chủ Đề