为什么IMAGETYPE_JPEG不接受所有JPEG?

时间:2012-06-25 23:11:56

标签: php

我很困惑为什么这段代码说JPEG文件和PNG文件无效。我希望这段代码只接受JPEG和PNG,并拒绝所有其他文件类型,但是现在,它拒绝一切。

<?

echo '
    <form method="post" action="upload.php">
        <input type="text" placeholder="url" name="url" /> <input type="submit" value="check" name="submit" />
    </form>
';

if (isset($_POST["submit"])) {

$url = $_POST["url"];

echo '<strong>URL:</strong> ' . $url;
echo '<br /><br />';

if(!filter_var($url, FILTER_VALIDATE_URL)) { //not valid f-in url
  echo('Invalid url given'); 

} else {
    if (exif_imagetype($url) != IMAGETYPE_JPEG || exif_imagetype($url) != IMAGETYPE_PNG) {
        echo 'Invalid Image<br />';
    } else {
        echo "Works.";
    }
}

}
?>

3 个答案:

答案 0 :(得分:2)

这些条件应该是AND:

if (exif_imagetype($url) != IMAGETYPE_JPEG && exif_imagetype($url) != IMAGETYPE_PNG)
    /* invalid image */

读起来就像一句话:如果它是一个JPEG 它的不是一个PNG,它就是无效的。

此外,将EXIF结果存储在自己的变量中,并将其用于比较而不是两次调用方法:

$itype = exif_imagetype($url);

if ($itype != IMAGETYPE_JPEG && $itype != IMAGETYPE_PNG)
    /* invalid image */

答案 1 :(得分:2)

你的陈述逻辑是倒退的。这基本上就是你写的:

$image_type = exif_imagetype($url);
if ($image_type != IMAGETYPE_JPEG || $image_type != IMAGETYPE_PNG) {
    echo 'Invalid Image<br />';
} else {
    echo "Works.";
}

转换为“如果图像类型不是JPEG或不是PNG,则无效”。相反,你想要:

if( $image_type == IMAGETYPE_JPEG || $image_type == IMAGETYPE_PNG) {
    echo "Works.";
} else {
    echo "Invalid Image<br />";
}

这是“如果图像类型是JPEG或PNG,它是有效的”,或者:

if ($image_type != IMAGETYPE_JPEG && $image_type != IMAGETYPE_PNG) {
    echo 'Invalid Image<br />';
} else {
    echo "Works.";
}

“如果图像不是JPEG且不是PNG,则无效”。

答案 2 :(得分:0)

!=意味着不平等。删除它并使用==