getimagesize() returns false on some images

lima picture lima · Nov 9, 2009 · Viewed 17.4k times · Source

I'm running getimagesize() to determine whether or not an uploaded file is a valid image and also it's MIME type. A user of my webapp reported that some of his images where getting an "invalid filetype" error after uploading them. So I asked him to send me some of them to check.

The error string itself is meaningless as it's just a generic text written by me when the functions fails (returns FALSE). I tried increasing PHP's memory limit with no success. Also, logs don't show anything unusual. Is there a problem with the files or is it something else? is there a better way to do this operation?

I'm accepting any file that getimagesize() accepts (meaning it has a width/height), I'm just checking that it doesn't return FALSE (although my real scope would be jpg|jpeg|png|gif|bmp|tif|tiff). The server is running PHP/5.2.6-1+lenny3. I repeat, this happens only with the image linked and some others from the same series, so I'm more inclined to think it's related to what Lizard is hinting.

$_FILES seems to be empty before getting to getimagesize($_FILES['Filedata']['tmp_name']) so the file is never really checked. I'll have to figure out why these files are not submitted like the rest (too big for PHP perhaps? any ideas?).

Answer

Until you give more information, I can't really help much. The following code:

$file = "http://img27.imageshack.us/img27/9159/dsc00799e.jpg";
$info = getimagesize($file);

echo "<pre>" . print_r($info,true) . "</pre>";

(Where $file is equal to the location of the image given in the question), outputs:

Array
(
    [0] => 2736
    [1] => 3648
    [2] => 2
    [3] => width="2736" height="3648"
    [bits] => 8
    [channels] => 3
    [mime] => image/jpeg
)

This seems okay. I'm assuming an error somewhere else in your checks?