我正在使用lib,在它上面行,并且我有这种检查数据是否是媒体的方法
function isMedia($blob) {
// Check for a JPG header.
if ($blob[0] == chr(0xFF) && $blob[1] == chr(0xD8)) {
return TRUE;
}
// Check for a MP4 header.
if ($blob[0] == chr(0x00) && $blob[1] == chr(0x00)) {
return TRUE;
}
return FALSE;
}
我对Blob数据不太好,我知道它检查数据的第一部分是否有特殊编码,我将如何检查PNG?
答案 0 :(得分:0)
我通常建议您使用来自GD或ImageMagick的PHP内置图像检测功能,但我认为您有充分的理由。因此,要检查PNG标头,您需要确保blob的第一部分匹配(根据http://www.libpng.org/pub/png/spec/1.2/PNG-Structure.html)
89 50 4e 47 0d 0a 1a 0a
类似
// Is PNG
if (
$blob[0] == chr(0x89) &&
$blob[1] == chr(0x50) &&
$blob[2] == chr(0x4e) &&
$blob[3] == chr(0x47) &&
$blob[4] == chr(0x0d) &&
$blob[5] == chr(0x0a) &&
$blob[6] == chr(0x1a) &&
$blob[7] == chr(0x0a)
) {
// Yes
}
我没有对上面的代码进行过测试,因此可能会出现轻微的错误,但您可以将其用作基础,但它应该有效;)
答案 1 :(得分:0)
最好的方法,如果你有一个最近的PHP并且可以做到(否则,请参阅Steven的解决方案)是使用fileinfo
并让libmagic
(与ImageMagick无关)做它的魔力:
function isMedia($blob) {
$finfo = new finfo(FILEINFO_MIME_TYPE);
$accepted_types = array(
'image/jpeg',
'image/png',
'video/mp4',
);
$mime = $finfo->buffer($blob);
return in_array($mime, $accepted_types);
}
实际上,如果您只想告诉别人的音频和视频媒体,您也可以这样做:
list($broad,) = explode('/', $mime); // get the "image" from "image/png"
return (('video' == $broad) || ('image' == $broad));