1

我对为什么这段代码说 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.";
    }
}

}
?>
4

3 回答 3

3

你的陈述逻辑是倒退的。这基本上就是您正在编写的内容:

$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,则它是无效的”。

于 2012-06-25T23:15:16.887 回答
2

这些条件应该是 ANDed:

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 */
于 2012-06-25T23:14:25.597 回答
0

!=表示不相等。删除它并使用==.

于 2012-06-25T23:15:32.850 回答