Search code examples
phpgetimagesize

PHP getimagesize empty output


<?php
$URL="http://cor-forum.de/forum/images/smilies/zombie.png";
list($width, $height) = getimagesize($URL);

echo 'width: '.$width.'<br>
height: '.$height;
?>

This results in the following output:

width:
height:

EDIT and I get the following warning:

Warning: getimagesize(http://cor-forum.de/forum/images/smilies/zombie.png): failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in /html/test.php on line 6

--whereas it displays the right values if I use another picture like

$URL='http://getfavicon.appspot.com/http://google.com?defaulticon=1pxgif';

EDIT: I'd like to enable the inclusion of external images in a forum, but I want to check their size first. So, what can I do to get the size of an image, whose server is "blocking me"?

EDIT: allow_url_fopen is set to ON, yes.


Solution

  • Faking the HTTP referer field seems to work on this one:

    <?php
    function getimgsize($url, $referer = '')
    {
        $headers = array(
                        'Range: bytes=0-32768'
                        );
    
        /* Hint: you could extract the referer from the url */
        if (!empty($referer)) array_push($headers, 'Referer: '.$referer);
    
        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $data = curl_exec($curl);
        curl_close($curl);
    
        $image = imagecreatefromstring($data);
    
        $return = array(imagesx($image), imagesy($image));
    
        imagedestroy($image);
    
        return $return;
    }
    
    list($width, $heigth) = getimgsize('http://cor-forum.de/forum/images/smilies/zombie.png', 'http://cor-forum.de/forum/');
    
    echo $width.' x '.$heigth;
    ?>
    

    Source of code