PHP检查文件是否为图像

有没有办法确保收到的文件中包含图像PHP?


对扩展程序的测试对我来说并不十分安全,因为您可以上传一个script并将其扩展名更改为所需的扩展名。


我也尝试使用getimagesize,但是可能有一些更适合该特定问题的东西。


芜湖不芜
浏览 601回答 3
3回答

MM们

获取mimetype的本机方法:对于PHP <5.3,请使用mime_content_type()对于PHP> = 5.3,请使用finfo_open()或mime_content_type()获得MimeType的替代方法是exif_imagetype和getimagesize,但是这些方法依赖于安装适当的库。此外,它们可能仅返回图像模仿类型,而不是magic.mime中给出的整个列表。虽然mime_content_type可以从PHP 4.3,是FileInfo的扩展的一部分(这是默认,因为PHP 5.3启用,除了Windows平台,它必须手动启用,详见这里)。如果您不想打扰系统上可用的功能,只需将所有四个函数包装到一个代理方法中,该方法将函数调用委托给任何可用的方法,例如function getMimeType($filename){&nbsp; &nbsp; $mimetype = false;&nbsp; &nbsp; if(function_exists('finfo_open')) {&nbsp; &nbsp; &nbsp; &nbsp; // open with FileInfo&nbsp; &nbsp; } elseif(function_exists('getimagesize')) {&nbsp; &nbsp; &nbsp; &nbsp; // open with GD&nbsp; &nbsp; } elseif(function_exists('exif_imagetype')) {&nbsp; &nbsp; &nbsp; &nbsp;// open with EXIF&nbsp; &nbsp; } elseif(function_exists('mime_content_type')) {&nbsp; &nbsp; &nbsp; &nbsp;$mimetype = mime_content_type($filename);&nbsp; &nbsp; }&nbsp; &nbsp; return $mimetype;}

GCT1015

在和getimagesize()应制定文件是否是一个图像的最明确的方式:if(@is_array(getimagesize($mediapath))){&nbsp; &nbsp; $image = true;} else {&nbsp; &nbsp; $image = false;}因为这是示例getimagesize()输出:Array ([0] => 800[1] => 450[2] => 2[3] => width="800" height="450"[bits] => 8[channels] => 3[mime] => image/jpeg)

慕标5832272

使用文件扩展名和getimagesize功能来检测上载的文件是否具有正确的格式只是入门级检查,它可以简单地通过上传具有真实扩展名和图像头的某些字节但内容错误的文件来绕过。为了安全起见,您可以对上传的图片进行缩略图/调整大小(即使具有原始图像尺寸),并保存此版本而不是上传的版本。还可以获取上传的文件内容并搜索特殊字符,例如<?php查找文件是否为图片。
打开App,查看更多内容
随时随地看视频慕课网APP