tags:

views:

76

answers:

6

Hello,

I have some images in bin, I want to check the header to check the format (jpg,png,etc)

I dont want to use temp files! I have a solution using TEMP FILES.

Thanks!

+1  A: 

Are the files being uploaded or are they already on the file system?

Try using mime_content_type() to get the file's MIME format.

pferate
A: 

Why not just check the file entension? :)

An Alternative

if(exif_imagetype($filepath) == IMAGETYPE_JPEG){
    echo 'This is a JPEG image';
}
Dutchie432
Absolutely unreliable.
Maerlyn
So most of your GIF files are not actually GIFs? There is really NO reason this wouldn't work unless you are dealing with user uploads, and even then you likely have nothing to worry about.
Dutchie432
+4  A: 

The bits start with:

$JPEG = "\xFF\xD8\xFF"
$GIF  = "GIF"
$PNG  = "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a"
$BMP  = "BM"
$PSD  = "8BPS"
$SWF  = "FWS"

The other ones I wouldn't know right now, but the big 3 (jpeg,gif,png) usually cover 99%. So, compare the first bytes to those string, and you have your answer.

Wrikken
A: 

Here's an implementation of the function as described by Wrikken

function getImgType($filename) {
    $handle = @fopen($filename, 'r');
    if (!$handle)
        throw new Exception('File Open Error');

    $types = array('jpeg' => "\xFF\xD8\xFF", 'gif' => 'GIF', 'png' => "\x89\x50\x4e\x47\x0d\x0a", 'bmp' => 'BM', 'psd' => '8BPS', 'swf' => 'FWS');
    $bytes = fgets($handle, 8);
    $found = 'other';

    foreach ($types as $type => $header) {
        if (strpos($bytes, $header) === 0) {
            $found = $type;
            break;
        }
    }
    fclose($handle);
    return $found;
}
quantumSoup
A: 

Use the fileinfo PHP extension:

http://de.php.net/manual/en/function.finfo-file.php

Its using the "file" *nix command to reliably determine the mime-type of a given file:

$finfo = finfo_open(FILEINFO_MIME_TYPE); 
$mimetype = finfo_file($finfo, $filename);
finfo_close($finfo);

This extension is shipped with PHP 5.3 or can be installed from pecl (pecl install fileinfo) for earlier versions.

beberlei
A: 

http://php.net/manual/en/function.getimagesize.php

"Index 2 is one of the IMAGETYPE_XXX constants indicating the type of the image."

GameZelda