2011-09-12 46 views

Trả lời

4

Tôi đoán 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

Đọc tài liệu: Không sử dụng getimagesize() để kiểm tra xem tệp đã cho là một hình ảnh hợp lệ hay không. http://php.net/manual/en/function.getimagesize.php –

-1

tôi sử dụng chức năng này ... nó sẽ kiểm tra url quá

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

có bạn đúng ... đã thêm khung. –

24

exif_imagetype là một giải pháp tốt hơn.

Phương pháp này nhanh hơn sử dụng getimagesize. Để báo giá php.net "Giá trị trả về là cùng một giá trị mà getimagesize() trả về trong chỉ mục 2 nhưng exif_imagetype() nhanh hơn nhiều."

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

Tất nhiên điều này chỉ hoạt động khi mở rộng EXIF ​​được kích hoạt. Trong trường hợp của tôi nó không phải là trường hợp và tôi không có quyền kiểm soát này :( –

-1

tôi sử dụng này:

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 là nhanh hơn nhiều so getimagesize và không sử dụng gd-Lib (để lại một mem dấu chân gọn gàng hơn)

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

    return TRUE; 
} 
2

Theo đề xuất của các PHP documentation:

"Không sử dụng getimagesize() để kiểm tra xem tệp đã cho có phải là hình ảnh hợp lệ không. Sử dụng ap giải pháp được xây dựng theo yêu cầu như phần mở rộng Fileinfo thay thế. "

Dưới đây là một ví dụ:

$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 :('; 
} 
Các vấn đề liên quan