PHP:二进制图像数据,检查图像类型

lla*_*aro 10 php image

我在bin中有一些图像,我想检查标题以检查格式(jpg,png等)

我不想使用临时文件!我有一个使用TEMP FILES的解决方案.

Mar*_*ert 33

我可以说大多数人都不明白这个问题:)(问题是如何验证缓冲区中的二进制数据,而不是磁盘上的文件).

我有同样的问题,并解决了它:

$finfo = new finfo(FILEINFO_MIME_TYPE);
$mimeType = $finfo->buffer($rawImage);
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用的是 PHP > 5.3,这个解决方案是最好的 (2认同)
  • 在 PHP 的当前状态下,这确实应该比我的要高,5.3 已经过时了。 (2认同)

Wri*_*ken 23

这些比特开始于:

$JPEG = "\xFF\xD8\xFF"
$GIF  = "GIF"
$PNG  = "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a"
$BMP  = "BM"
$PSD  = "8BPS"
$SWF  = "FWS"
Run Code Online (Sandbox Code Playgroud)

其他我现在不知道的,但是大3(jpeg,gif,png)通常覆盖99%.因此,将第一个字节与这些字符串进行比较,您就得到了答案.

  • @DonutReply - 仅供搜索的人使用:https://gist.github.com/CodeBrauer/5fe9ad14fa9786b3d1f6 (3认同)
  • 您能否举个例子,说明如何使用php对一些二进制数据进行检查?谢谢 (2认同)

qua*_*oup 6

这是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;
}
Run Code Online (Sandbox Code Playgroud)