2012-06-25 5 views
1

이 코드가 JPEG 파일이고 PNG 파일이 유효하지 않은 이유에 대해 혼란 스럽습니다. 이 코드가 JPEG 및 PNG 만 허용하고 다른 모든 파일 형식은 거부하지만 지금은 모든 것을 거부합니다.IMAGETYPE_JPEG에서 모든 JPEG를 허용하지 않는 이유는 무엇입니까?

<? 

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."; 
    } 
} 

} 
?> 

답변

2

명세서 논리를 거꾸로입니다. 이것은 당신이 쓰고있는 무슨 본질적 :

에 "이미지 형식은 JPEG하지 않습니다 또는 PNG가 아닌 경우, 그것은 잘못이다"번역
$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하지 않고 경우

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

"그렇지 않다 PNG, 유효하지 않습니다. "

+0

내 코드를 정리하고 오류를 해결해 주셔서 감사합니다. – Ramin

2

이러한 조건은 AND로해야합니다

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

문장처럼 읽기 : 그것은 하지 PNG 파일, 그것은 무효의의가은 JPEG 를 아니라면.

또한, 자신의 변수에 EXIF ​​결과를 저장하고 두 번 메서드를 호출하는 대신 비교를 위해 그것을 사용

$itype = exif_imagetype($url); 

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

의견에 감사드립니다. – Ramin

0

!= 의미가 동일하지 않습니다. 그것을 제거하고 ==을 사용하십시오.

관련 문제