0

I wrote a PHP script that allows me to get the dimensions (width and height) of a remotely hosted JPG without having to download it in full (just the first 10K).

The problem with this is I write the partial download to a file, then read that file to extract the information I need (using getImageSize).

I know this can be down without writing to disk, but I do not know how.

Anyone have suggestions/solutions?

Here is my original code:

function remoteImage($url){
    $ch = curl_init ($url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
    curl_setopt($ch, CURLOPT_RANGE, "0-10240");

    $fn = "partial.jpg";
    $raw = curl_exec($ch);
    $result = array();

    if(file_exists($fn)){
        unlink($fn);
    }

    if ($raw !== false) {

        $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);

        if ($status == 200 || $status == 206) {

            $result["w"] = 0;
            $result["h"] = 0;

            $fp = fopen($fn, 'x');
            fwrite($fp, $raw);
            fclose($fp);

            $size = getImageSize($fn);

            if ($size===false) {
            //  Cannot get file size information
            } else {
            //  Return width and height
                list($result["w"], $result["h"]) = $size;
            }

        }
    }

    curl_close ($ch);
    return $result;
}

My original question, which lead to this, is here - and might be helpful.

Community
  • 1
  • 1
donohoe
  • 13,867
  • 4
  • 37
  • 59

1 Answers1

1

It may be possible to use a memory file stream.

$fn = 'php://memory';

See: http://php.net/manual/en/wrappers.php.php

rrehbein
  • 4,120
  • 1
  • 17
  • 23