当我尝试使用简单的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.";
}
答案 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"]
是浏览器报告的类型,因此可能不正确或丢失。您是否尝试过登录以查看浏览器的确切发送内容?
答案 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代码)