我在bin中有一些图像,我想检查标题以检查格式(jpg,png等)
我不想使用临时文件!我有一个使用TEMP FILES的解决方案。
答案 0 :(得分:29)
我可以说大多数人都不明白这个问题:)(问题是如何验证缓冲区中的二进制数据,而不是磁盘上的文件)。
我遇到了同样的问题,并通过以下方式解决了问题:
$finfo = new finfo(FILEINFO_MIME_TYPE);
$finfo->buffer($rawImage);
答案 1 :(得分:21)
这些位以:
开头$JPEG = "\xFF\xD8\xFF"
$GIF = "GIF"
$PNG = "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a"
$BMP = "BM"
$PSD = "8BPS"
$SWF = "FWS"
其他我现在不知道的,但是大3(jpeg,gif,png)通常覆盖99%。因此,将第一个字节与这些字符串进行比较,您就得到了答案。
答案 2 :(得分: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;
}
答案 3 :(得分:1)
文件是上传还是已经在文件系统上?
尝试使用mime_content_type()
获取文件的MIME格式。
答案 4 :(得分:1)
http://php.net/manual/en/function.getimagesize.php
“索引2是指示图像类型的IMAGETYPE_XXX常量之一。”
答案 5 :(得分:0)
为什么不检查文件扩展名? :)
另类
if(exif_imagetype($filepath) == IMAGETYPE_JPEG){
echo 'This is a JPEG image';
}
答案 6 :(得分:0)
使用fileinfo PHP扩展:
http://de.php.net/manual/en/function.finfo-file.php
使用“file”* nix命令可靠地确定给定文件的mime类型:
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimetype = finfo_file($finfo, $filename);
finfo_close($finfo);
此扩展程序随PHP 5.3一起提供,或者可以从pecl(pecl install fileinfo)安装以用于早期版本。