【发布时间】:2012-03-03 15:04:50
【问题描述】:
如果从.png重命名为.jpg,是否可以检查图像的类型?
我需要这个,因为当我使用调整大小功能时,如果上传的图像从 .png 重命名为 .jpg,我的网站将停止工作(我让我的代码只接受 .jpg 图像)
【问题讨论】:
-
您使用什么过程来调整大小。你应该看看它,看看它是如何保存调整大小的图像并强制它为
.jpg
如果从.png重命名为.jpg,是否可以检查图像的类型?
我需要这个,因为当我使用调整大小功能时,如果上传的图像从 .png 重命名为 .jpg,我的网站将停止工作(我让我的代码只接受 .jpg 图像)
【问题讨论】:
.jpg
每个 .png 都以这些字节开头:
89 50 4E 47 0D 0A 1A 0A
它们是 PNG 签名。如果 .jpg 以这些字节开头,则它不是 jpg。
【讨论】:
getimagesize 将包含有关图像类型的信息:
$info = getimagesize('file.png');
if($info[2] == IMAGETYPE_JPEG){
}
【讨论】:
您始终可以使用exif_imagetype() 读取图像类型以检查图像
$image_type = exif_imagetype($filename);
例子:
<?php
if (exif_imagetype('image.gif') != IMAGETYPE_GIF) {
echo 'The picture is not a gif';
}
?>
【讨论】:
您需要知道的不是文件的历史,而是它的真实格式。您可以通过检查文件的内容来做到这一点:JPG 文件应以字节 FF D8 开头并以 FF D9 结尾。 PNG 文件以不同的签名开头:\211 P N G \r \n \032 \n(十六进制:89 50 4E 47 0D 0A 1A 0A)。
有关详细信息,请参阅此网站: http://en.wikipedia.org/wiki/Magic_number_%28programming%29
【讨论】:
是的,你可以使用这个
if($_FILES["imagefile"]["type"] == "image/jpeg")
{
return true;
}
else if($_FILES["imagefile"]["type"] == "image/png")
{
return false;
}
或者你应该使用这个 mime_content_type 更可靠,因为 $_FILES["imagefile"]["type"] 可以从客户端伪造......
【讨论】:
试试file 命令。
当unknownimage为JPG图片时:
$ file unknownimage
unknownimage: JPEG image data, baseline, precision 8, 400x400, frames 3
当unknownimage文件为PNG图片时:
$ file unknownimage
unknownimage: PNG image data, 779 x 701, 8-bit/color RGBA, non-interlaced
【讨论】: