这个问题已经在这里有一个答案:
- 如何在PHP中检查上传的文件类型 8个回答
有没有一种办法,以确保接收的文件是在图像PHP
?
测试的扩展听起来不很安全的把我当成你可以上传script
和扩展名更改为任何你想要的。
我试着用getimagesize
过,但有可能是一个更适合于特定的问题。
这个问题已经在这里有一个答案:
有没有一种办法,以确保接收的文件是在图像PHP
?
测试的扩展听起来不很安全的把我当成你可以上传script
和扩展名更改为任何你想要的。
我试着用getimagesize
过,但有可能是一个更适合于特定的问题。
本机的方式来获得MIME类型:
对于PHP <5.3使用mime_content_type()
为PHP> = 5.3使用finfo_open()或mime_content_type()
替代方案,以获得Mime类型是exif_imagetype和和getimagesize ,但这些依赖于具有安装相应的库。 此外,他们可能会只返回图像MIME类型,而不是给整个列表magic.mime 。
虽然mime_content_type
可从PHP 4.3,是FileInfo的扩展(默认情况下,因为PHP 5.3启用,除了Windows平台,它必须手动启用,详见部分在这里 )。
如果你不希望打扰一下什么是你的系统上,只是包装全部四个功能集成到一个代理方法委托函数调用一切可用,如
function getMimeType($filename)
{
$mimetype = false;
if(function_exists('finfo_open')) {
// open with FileInfo
} elseif(function_exists('getimagesize')) {
// open with GD
} elseif(function_exists('exif_imagetype')) {
// open with EXIF
} elseif(function_exists('mime_content_type')) {
$mimetype = mime_content_type($filename);
}
return $mimetype;
}
在和getimagesize()应制定文件是否是一个图像的最明确的方式:
if(@is_array(getimagesize($mediapath))){
$image = true;
} else {
$image = false;
}
因为这是一个样本和getimagesize()输出:
Array (
[0] => 800
[1] => 450
[2] => 2
[3] => width="800" height="450"
[bits] => 8
[channels] => 3
[mime] => image/jpeg)
使用文件扩展名getimagesize
函数来检测,如果上传的文件有正确的格式只是入门级检查,它可以简单地通过上传与真正的延伸和图像头,但错误的内容的一些字节的文件绕过。
为是安全可靠的,你可以让缩略图/调整(即使是原始图像大小)上传的图片,并保存此版本而不是上传一个。 也是其可能得到上传的文件内容和搜索它像特殊字符<?php
要查找的文件是图像还是不行。