PHP文件类型检查

时间:2011-04-10 02:00:03

标签: php

当我尝试使用简单的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.";
        }

4 个答案:

答案 0 :(得分:5)

“不是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类型。例如,请参阅How to get the content-type of a file in PHP?

答案 1 :(得分:1)

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

答案 2 :(得分:1)

你的条件错了,你想要“&&”而不是“||”。此外,$_FILES["file"]["type"]是浏览器报告的类型,因此可能不正确或丢失。您是否尝试过登录以查看浏览器的确切发送内容?

使用FileInfo或类似内容检查类型,或查看GD或其他图片处理扩展程序是否接受它,您会得到更好的服务。

答案 3 :(得分:0)

我更希望getimagesize()避免使用mime类型的问题,特别是JPEG,其中有很多mime类型是可能的。(正如Anomie写的$_FILES["file"]["type"]是由类型报告的类型浏览器)。

尝试一下,采取一些奇特的文件类型,并给它一个像.gif或.jpg的扩展名。

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

这可用于上传,例如PHP脚本到服务器上。

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