2015-11-13 104 views
1

我試圖讓某些格式上傳到我的網站。我使用調用getimagesize()來識別圖像類型(作爲第三個參數返回)。我遵循this guide來執行該操作。下面的代碼:允許某些圖片格式無效

$img=$_FILES['img']; 
$info = getimagesize($img); 

if (($info[2] !== IMAGETYPE_GIF) && ($info[2] !== IMAGETYPE_JPEG) && ($info[2] !== IMAGETYPE_PNG)) { 
    echo json_encode(array('bad' => 'Bad Format')); 
    exit(); 
} else { 
    echo json_encode(array('good' => 'Good format')); 
    exit(); 
} 

不管是什麼文件格式我嘗試上傳,我總是得到else聲明。 echo json_encode(array('good' => 'Good format'));

爲什麼會發生這種情況,我該如何解決?

+0

你反對'const'的比較 - 'IMAGETYPE_JPEG',將它們放在引號中以作爲字符串進行比較 - 「IMAGETYPE_JPEG」。另外,你使用'&&'(和),你想要使用'||'(或)。 – Darren

回答

0

由於您使用的是&&運算符,因此它將始終爲假。

$img=$_FILES['img']; 
$accepted = array('image/jpeg','image/png','image/gif'); 

if (in_array($img['type'],$accepted)) { 
    echo json_encode(array('bad' => 'Good Format')); 
    exit(); 
} else { 
    echo json_encode(array('good' => 'Bad format')); 
    exit(); 
} 

使用||or得到你想要的東西。

getimagesize()

$img=$_FILES['img']; 
$info = getimagesize($img['tmp_name']); //pass the file 
做這

你的條件更改爲||(或)

if (($info[2] === IMAGETYPE_GIF) || ($info[2] === IMAGETYPE_JPEG) || ($info[2] === IMAGETYPE_PNG)) { 
    echo json_encode(array('bad' => 'Good Format')); 
    exit(); 
} else { 
    echo json_encode(array('good' => 'Bad format')); 
    exit(); 
} 
+0

我試過了,但現在我得到了第一個if語句,所有的時候 – Horay

+0

答案更新了。 – roullie

+0

現在有效。爲什麼它不以另一種方式工作? – Horay

0

您使用了錯誤的操作。您正在使用&&(和),這意味着全部 3如果條件必須符合爲它返回你想要的。此外,您正在比較const,我認爲這是您要與字符串進行比較的位置。所以,你可以很方便的清理你的代碼,就像這樣:

if(!in_array($info[2], array('IMAGETYPE_GIF', 'IMAGETYPE_JPEG','IMAGETYPE_PNG'))) { 
    echo json_encode(array('bad' => 'Good Format')); 
    exit(); 
} else { 
    echo json_encode(array('good' => 'Bad format')); 
    exit(); 
} 

或實際使用||(或)經營者對你的條件下運行:

if (($info[2] === IMAGETYPE_GIF) || ($info[2] === IMAGETYPE_JPEG) || ($info[2] === IMAGETYPE_PNG)) { 
    echo json_encode(array('bad' => 'Good Format')); 
    exit(); 
} else { 
    echo json_encode(array('good' => 'Bad format')); 
    exit(); 
} 
+0

我試過兩個例子,現在我得到第一個if語句。 – Horay

+0

@豪利太容易了! – Darren

+0

我得到第一個if語句與我上傳的任何文件 – Horay