Hathor

Return Largest Image

Nov 24th, 2013
281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.30 KB | None | 0 0
  1. <?php
  2. class Functions{
  3.     /*
  4.      * @author - Matt Cain from www.caincode.com
  5.      * (Edited to fit purpose)
  6.      */
  7.     public function scrapeLargestImage($url) {
  8.         // Returns the page content
  9.         $page = file_get_contents($url);
  10.      
  11.         //Makes sure the page is not null
  12.         if (!$page) {
  13.             return false;
  14.         }
  15.        
  16.         // Works with internal errors in libxml (basically hides those errors)
  17.         libxml_use_internal_errors(true);
  18.        
  19.         /*Creates a new document, and loads it from the URL
  20.          * Then returns all img elements */
  21.         $dom = new DOMDocument;
  22.         $dom->loadHTML($page);
  23.         $imgs = $dom->getElementsByTagName('img');
  24.         $imgsVisited = array();
  25.         $maxLen = 0;
  26.         $largest = '';
  27.        
  28.         // Iterates through each image on the page
  29.         foreach ($imgs as $img) {
  30.            
  31.             //Returns the image attribute
  32.             $src = $img->getAttribute('src');
  33.            
  34.             //Checks if the image is null or has been visited
  35.             if (!empty($src) && !isset($imgsVisited[$src])) {
  36.                 $imgsVisited[$src] = true;
  37.                 $ch = curl_init($src);
  38.                 curl_setopt($ch, CURLOPT_NOBODY, true);
  39.                 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  40.                 curl_setopt($ch, CURLOPT_HEADER, true);
  41.                 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  42.                 $data = curl_exec($ch);
  43.                 curl_close($ch);
  44.                 if ($data === false) {
  45.                     continue;
  46.                 }
  47.                 /* Sets image length to contentLen, then checks if
  48.                  * contentLen is larger than the lax length*/
  49.                 $contentLen = 0;
  50.                 if (preg_match('/Content-Length: (\d+)/', $data, $matches)) {
  51.                     $contentLen = (int)$matches[1];
  52.                 }
  53.                 if ($contentLen > $maxLen) {
  54.                     $maxLen = $contentLen;
  55.                     $largest = $src;
  56.                 }
  57.             }
  58.         }
  59.        
  60.         //Checks if there is a largest image, returns it's src attribute if so
  61.         if (!empty($largest)) {
  62.             return $largest;
  63.         } else {
  64.             return false;
  65.         }
  66.     }
  67. }
  68. ?>
Advertisement
Add Comment
Please, Sign In to add comment