2011-09-12 42 views

回答

4

我猜getimagesize

list($width, $height, $type, $attr) = getimagesize("path/to/image.jpg"); 

if (isset($type) && in_array($type, array(
    IMAGETYPE_PNG, IMAGETYPE_JPEG, IMAGETYPE_GIF))) { 
    ... 
} 
+5

閱讀文檔:不要使用getimagesize()來檢查給定的文件是否是有效的圖像。 http://php.net/manual/en/function.getimagesize.php –

-1

我使用這個函數...它檢查網址太

function isImage($url){ 
    $params = array('http' => array(
       'method' => 'HEAD' 
      )); 
    $ctx = stream_context_create($params); 
    $fp = @fopen($url, 'rb', false, $ctx); 
    if (!$fp) 
     return false; // Problem with url 

    $meta = stream_get_meta_data($fp); 
    if ($meta === false){ 
     fclose($fp); 
     return false; // Problem reading data from url 
    } 
} 
+0

是的,你是對的...添加括號。 –

24

exif_imagetype是一個更好的解決方案。

該方法比使用getimagesize更快。引用php.net「返回值與getimagesize()在索引2中返回的值相同,但exif_imagetype()更快。」

if(exif_imagetype('path/to/image.jpg')) { 
    // your image is valid 
} 
+1

當然這隻有在啓用EXIF擴展時纔有效。在我的情況下,情況並非如此,我無法控制這:( –

-1

我用這個:

function is_image($path) 
{ 
    $a = getimagesize($path); 
    $image_type = $a[2]; 

    if(in_array($image_type , array(IMAGETYPE_GIF , IMAGETYPE_JPEG ,IMAGETYPE_PNG , IMAGETYPE_BMP))) 
    { 
     return true; 
    } 
    return false; 
} 
1

exif_imagetype比和getimagesize快得多,並且不使用GD-庫(留下一個更精簡MEM足跡)

function isImage($pathToFile) 
{ 
    if(false === exif_imagetype($pathToFile)) 
    return FALSE; 

    return TRUE; 
} 
2

所推薦PHP documentation

「請勿使用getimagesize()來檢查給定文件是否爲有效圖像。請使用ap改爲使用構建解決方案,如Fileinfo擴展。「

下面是一個例子:

$finfo = finfo_open(FILEINFO_MIME_TYPE); 
$type = finfo_file($finfo, "test.jpg"); 

if (isset($type) && in_array($type, array("image/png", "image/jpeg", "image/gif"))) { 
    echo 'This is an image file'; 
} else { 
    echo 'Not an image :('; 
} 
相關問題