Determining the image type of a file
One thing I learnt recently which I probably should have known already is that getimagesize() returns more than just the width and height of the image.
I’ve always used it like this:
list($width, $height) = getimagesize($filename);
However, getimagesize() also returns up to 5 more pieces of information.
Interestingly, the data array is a mix of indexed elements and named elements For example, for a file I uploaded while testing a PR, the output of print_r(getimagesize($filename)) is:
Array
(
[0] => 1440
[1] => 1440
[2] => 3
[3] => width="1440" height="1440"
[bits] => 8
[mime] => image/png
)
A very strange decision when designing the response of this function!
Index 2 is the file type which is an “IMAGETYPE” constant, such as IMAGETYPE_PNG. Note that there’s also a constant called IMG_PNG, but this is a different number, so make sure you use the right one!
This is useful for file uploads. Consider this data in $_FILES:
Array
(
[image] => Array
(
[name] => myimage
[type] => application/octet-stream
[tmp_name] => /tmp/phpbGyIq7
[error] => 0
[size] => 90410
)
)
In this case, there is no extension on the uploaded filename and the type is application/octet-stream. If I want to resize this image using gd, then I’m going to need to know whether to use imagejpeg, imagegif or imagepng. A simple way to do this is something like this:
list($width, $height, $imageType) = getimagesize($filename);
// create $smallImage using imagecreatetruecolor() and imagecopyresampled(), etc.
// save image
switch ($imageType) {
case IMAGETYPE_JPEG:
imagejpeg($smallImage, $event_image_path . $small_filename);
break;
case IMAGETYPE_GIF:
imagegif($smallImage, $event_image_path . $small_filename);
break;
case IMAGETYPE_PNG:
imagepng($smallImage, $event_image_path . $small_filename);
break;
default:
throw new Exception("Unable to deal with image type");
}
It’s easier than dealing with the type from $_FILES too and by writing it down, maybe I’ll remember it.



Cool switch, added to my snippets right away :)
Thank you for sharing.
How to upload your file?
why i can't do like above.
"`html
"`
"`php
var_dump(getimagesize($_FILES['file']['name']));
"`