如何使用PHP检测上传的文件是否为图像?
我不想使用imagesize()
或检查文件扩展名。
答案 0 :(得分:8)
不要愚蠢,使用专门为此目的而制作的工具 - getimagesize()
答案 1 :(得分:5)
您可以使用ImageMagick identify tool获取有关比getimagesize()支持的更多种图像格式的信息,例如
$uploaded=$_FILES["myfile"]["tmp_name"];
$info = `identify $uploaded`;
以下是JPEG
的一些示例输出img029.jpg JPEG 1240x1753 1240x1753+0+0 8-bit PseudoClass 256c 27.3KiB 0.000u 0:00.000
答案 2 :(得分:4)
如果您正在谈论将要在浏览器中显示的图像,并且您希望尽可能确保它们是有效图像,我建议使用相应的imagecreatefrom*()
功能在GD中打开它们并保存他们回到所需的目标格式。
这不仅确保它们是图像 - 如果输入数据被破坏,这将无法工作 - 但它也会过滤掉利用浏览器图形库中泄漏的任何可能的恶作剧,并删除图像中包含的元数据(通常包含敏感信息,如作者,用于创建图像的程序,相机,位置和拍摄时间),并确保可以在浏览器中查看图像(CMYK JPG上传,不会显示在任何版本的IE中,不会起作用。)
可能的缺点是JPEG图像可能会受到轻微的质量损失(GD的JPG编码质量不佳),并且可能存在透明胶片图像的问题。
答案 3 :(得分:1)
您可以使用mime_content_type并验证上传文件的类型。由于不推荐使用mime_content_type,您可以使用其备用 finfo_open 。