Tutorial :Check whether image exists on remote URL



Question:

I am generating dynamic URLs of images for book ISBNs. I need a reliable way with PHP to check whether the images actually exist at the remote url. I tried various approaches with different PHP libraries, curl, etc., but none of them works well, some of them are downright slow. Given the fact that I need to generate (and check!) about 60 URLS for each book in my database, this is a huge waiting time. Any clues?


Solution:1

function checkRemoteFile($url)  {      $ch = curl_init();      curl_setopt($ch, CURLOPT_URL,$url);      // don't download content      curl_setopt($ch, CURLOPT_NOBODY, 1);      curl_setopt($ch, CURLOPT_FAILONERROR, 1);      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        $result = curl_exec($ch);      curl_close($ch);      if($result !== FALSE)      {          return true;      }      else      {          return false;      }  }  

--> that is the fastest way if your host supports curl


Solution:2

Use getimagesize() method like this

$external_link = ‘http://www.example.com/example.jpg’;  if (@getimagesize($external_link)) {  echo  “image exists “;  } else {  echo  “image does not exist “;  }  


Solution:3

There is no "easy" way here - at a very minimum, you need to generate a HEAD request and check the resulting content type to make sure it's an image. That's not taking into account possible referrer issues. curl is the way to go here.


Solution:4

You could use curl. Just set the curl option CURLOPT_NOBODY to true. This will skip body information and only get the head (thus http code as well). Then, you could use the CURLOPT_FAILONERROR to turn this whole process into a true/false type check


Solution:5

You can use getimagesize()

Credit: http://junal.wordpress.com/2008/07/22/checking-if-an-image-url-exist/


Solution:6

I have been doing this for my real estate picture tracking...

$im = @imagecreatefromjpeg($pathtoimg);  if($im)    imagedestroy($im); // dont save, just ack...  elseif(!$missing[$inum])    $img404arr[] = $inum;  

It 'seems' faster than downloading the actual image, taking about .3 seconds for each from images that avg 100k.

I wish I could just do a header check and read whether I get a 200 vs a 404 without downloading anything. Anyone have that handy?


Solution:7

It's probably a mute point at this point, but this works for me:

function is_webfile($webfile)  {   $fp = @fopen($webfile, "r");   if ($fp !== false)    fclose($fp);     return($fp);  }  


Solution:8

Solution from https://www.experts-exchange.com

<?php  function url_exists($url) {      if (!$fp = curl_init($url)) return false;      return true;  }  ?>  


Solution:9

If the images all exist on the same remote server (or in the same network), you could run a web service on that server that will check the file system for the the image file and return a bool value indicating wheter the image exists or not.


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »