Tôi có một số hình ảnh trong bin, tôi muốn kiểm tra các tiêu đề để kiểm tra định dạng (jpg, png, vv)PHP: nhị phân dữ liệu hình ảnh, kiểm tra các loại hình ảnh
Tôi không muốn sử dụng các file tạm ! Tôi có một giải pháp sử dụng TEMP FILES.
Tôi có một số hình ảnh trong bin, tôi muốn kiểm tra các tiêu đề để kiểm tra định dạng (jpg, png, vv)PHP: nhị phân dữ liệu hình ảnh, kiểm tra các loại hình ảnh
Tôi không muốn sử dụng các file tạm ! Tôi có một giải pháp sử dụng TEMP FILES.
Các bit bắt đầu với:
$JPEG = "\xFF\xD8\xFF"
$GIF = "GIF"
$PNG = "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a"
$BMP = "BM"
$PSD = "8BPS"
$SWF = "FWS"
Những người khác tôi sẽ không biết ngay bây giờ, nhưng lớn 3 (jpeg, gif, png) thường bao gồm 99%. Vì vậy, so sánh các byte đầu tiên với chuỗi đó và bạn có câu trả lời của mình.
Các tệp đang được tải lên hoặc chúng đã có trên hệ thống tệp chưa?
Hãy thử sử dụng mime_content_type()
để nhận định dạng MIME của tệp.
Tại sao không chỉ kiểm tra tệp entension? :)
Một lựa chọn
if(exif_imagetype($filepath) == IMAGETYPE_JPEG){
echo 'This is a JPEG image';
}
Hoàn toàn không đáng tin cậy. – Maerlyn
Vì vậy, hầu hết các tệp GIF của bạn không thực sự là GIF? Có thực sự KHÔNG có lý do này sẽ không hoạt động trừ khi bạn đang đối phó với tải lên của người dùng, và thậm chí sau đó bạn có thể không có gì phải lo lắng về. – Dutchie432
Vào năm 2012, một số người dùng tin rằng họ có thể chuyển đổi hình ảnh chỉ bằng cách đổi tên tệp ... Vì vậy, nó không đáng tin cậy. – djleop
Dưới đây là một thực hiện các chức năng như mô tả của Wrikken
function getImgType($filename) {
$handle = @fopen($filename, 'r');
if (!$handle)
throw new Exception('File Open Error');
$types = array('jpeg' => "\xFF\xD8\xFF", 'gif' => 'GIF', 'png' => "\x89\x50\x4e\x47\x0d\x0a", 'bmp' => 'BM', 'psd' => '8BPS', 'swf' => 'FWS');
$bytes = fgets($handle, 8);
$found = 'other';
foreach ($types as $type => $header) {
if (strpos($bytes, $header) === 0) {
$found = $type;
break;
}
}
fclose($handle);
return $found;
}
Sử dụng tiện ích fileInfo PHP:
http://de.php.net/manual/en/function.finfo-file.php
của nó bằng cách sử dụng "file" * nix lệnh đáng tin cậy xác định mime -loại của một tệp nhất định:
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimetype = finfo_file($finfo, $filename);
finfo_close($finfo);
Phần mở rộng này được vận chuyển với PHP 5.3 hoặc có thể được cài đặt từ pecl (pecl install fileinfo) cho các phiên bản trước đó.
http://php.net/manual/en/function.getimagesize.php
"Index 2 là một trong những hằng số IMAGETYPE_XXX chỉ ra kiểu của hình ảnh."
Tôi có thể hiểu rằng hầu hết các bạn không hiểu câu hỏi :) (câu hỏi là cách xác thực dữ liệu nhị phân trong bộ đệm, không phải tệp trên đĩa).
tôi đã cùng một vấn đề, và giải quyết nó với:
$finfo = new finfo(FILEINFO_MIME_TYPE);
$finfo->buffer($rawImage);
Bạn có thể đưa ra một ví dụ về cách bạn sẽ kiểm tra những điều này đối với một số dữ liệu nhị phân bằng cách sử dụng php? cảm ơn – DonutReply
@ DonutReply - chỉ dành cho những người đang tìm kiếm: https://gist.github.com/CodeBrauer/5fe9ad14fa9786b3d1f6 – CodeBrauer
Bạn có bất kỳ thông tin nào về các bit cuối cùng để tìm ra phần cuối của hình ảnh không? – Daniel