检测上传的文件是否是PHP中的图像

时间:2010-08-22 14:24:06

标签: php

如何使用PHP检测上传的文件是否为图像?

我不想使用imagesize()或检查文件扩展名。

4 个答案:

答案 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