我很困惑为什么这段代码说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.";
}
}
}
?>
答案 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)
!=
意味着不平等。删除它并使用==
。