LinksHTMLDespués de un pequeño periodo en el que estoy bastante saturado de proyectos y en el que no he podido publicar a penas 3 lineas, os traigo una función de las que no tiene un uso concreto pero si una utilidad.
La función linksHTML() busca los archivos y direcciones que se contienen en un archivo html o css, realizando un array multidimensional a partir de sus extensiones.
El único parámetro que se necesita introducir para que funcione es una URL, (la URL del archivo a leer, la cual puede ser local o externa, pero siempre tiene que ser completa). Si la URL no tiene HTTP:// delante, no pasa nada, automaticamente la funcion lo detecta y lo pone.
Si se produce un error y el archivo no se encuentra o no se puede leer el resultado de la funcion no será el array con los archivos si no un array con un solo valor error que indicará La URL ######### no fue encontrada.

A continuación un ejemplo simple que muestra los archivos con sus respectivas extensiones en forma de arrya discriminando si la web existe o no:

PHP:
  1. <?php
  2.     $url = 'www.flickr.com';
  3.     $enlaces = linkHTML($url);
  4.  
  5.     if(!$enlaces['error']){ //si no hay errores
  6.         echo 'Los archivos encontrados son:'."<br />\n";
  7.         print_r($enlaces);
  8.     } else {    //si hay errores
  9.         echo $enlaces['error'];
  10.     }
  11. ?>

y aquí el código de la función.

PHP:
  1. function linksHTML($url){
  2.     //deteccion de http
  3.     $url = substr($url, 0, 7) == 'http://' ? $url : 'http://'.$url;
  4.     if(!$query        = @file_get_contents($url)){
  5.         return array('error' => 'La URL \''.$url.'\' no fue encontrada.');
  6.     }
  7.    
  8.     //buscador de enlaces
  9.     preg_match_all( "!href=\"(.+)\"!U"$query,   $enlaces['href']   );
  10.     preg_match_all( "!src=\"(.+)\"!U",   $query,    $enlaces['src']  );
  11.     preg_match_all( "!url\((.+)\)!U",    $query$enlaces['URL-CSS']  );
  12.    
  13.     $enlaces        = array_unique(array_merge($enlaces['src'][1], $enlaces['href'][1], $enlaces['URL-CSS'][1]));
  14.    
  15.     //reconstructor de enlaces
  16.     $url_base      = parse_url($url)$url_base        = 'http://'.$url_base['host'];
  17.     $url_absolute   = pathinfo($url)$url_absolute = $url_absolute['dirname'];
  18.    
  19.     foreach($enlaces as $k => $enlace){
  20.         switch(substr($enlace, 0, 1)) {
  21.             case 'h':   if(substr($enlace, 0, 7) == 'http://') break;
  22.             case '/':   $enlaces[$k]   = $url_base        .'/'. $enlace;
  23.             case '.':
  24.             case '#':
  25.             case '.':
  26.             case '?':   
  27.             default:    $enlaces[$k]    = $url_absolute .'/'. $enlace;
  28.         }
  29.         $info                  = pathinfo($enlaces[$k]);
  30.         $info['extension']      = $info['extension'] == ''    ? 'html' : $info['extension'];
  31.         $info['extension']      = strpos($enlaces[$k], '?')   ? '?' : $info['extension'];
  32.         $ilegal_chars = array('\'', '%', '"');
  33.         $s[str_replace($ilegal_chars, '', $info['extension'])][]    = str_replace($ilegal_chars, '', $enlaces[$k]);
  34.     }
  35.     return $s;
  36. }

Espero comentarios de para que aplicaríais esto ;) por mi parte prometo hacer una función/aplicación de esto pronto!