PHP文件类型检查


PHP files type checking

当我尝试一个简单的php代码来检查文件类型时,它无法通过。下面的代码有什么错误吗?提前谢谢。

if(($_FILES["file"]["type"]!="image/jpeg")||
            ($_FILES["file"]["type"]!="image/gif")||
            ($_FILES["file"]["type"]!="image/png")){
            echo "File must be in format of jpeg,gif or png.";
        }

"不是一个JPEG","不是一个GIF","不是一个PNG"至少有两个条件true。由于您使用的是||,如果其中任何true,则整个if条件是true

你正在寻找"不是JPEG 不是GIF 不是PNG"

除此之外,你还可以使用更简洁的形式:

!in_array($_FILES["file"]["type"], array('image/jpeg', 'image/gif', 'image/png'))

另外,$_FILES["file"]["type"]是用户提供的信息,您不应该信任它。您应该尝试自己从文件本身找出MIME类型。例如,参见如何在PHP中获取文件的内容类型?

mime_content_type('php.gif')将输出image/gif

你的条件是错误的,你想要"&&"而不是"||"。此外,$_FILES["file"]["type"]是浏览器报告的类型,因此它很可能不正确或缺失。你试过登录它看看浏览器到底在发送什么吗?

您可以使用FileInfo或类似的检查类型,或查看GD或其他图像处理扩展是否接受它。

我更倾向于使用getimagesize()来避免mime类型的问题,尤其是jpeg格式,因为有很多mime类型是可能的。(正如Anomie所写,$_FILES["file"]["type"]是浏览器报告的类型)。

试试,取一些外来的文件类型,并给它一个扩展名,如。gif或。jpg。

$_FILES["file"]["type"]将报告类似'image.gif'或'image.jpeg'的内容,但getimagesize()将返回false,因为它检测到该文件不是图像。

这可以用来上传php脚本到服务器。

另外注意:永远不要相信任何上传的文件,图片可能是正确的,但也可能包含php代码在注释中。因此,请确保服务器上的任何php脚本都不能包含这些图像。(另外,您可以检查图像中的php代码)