En esta ocasión, a partir de lo que nos devuelva dicha función, y mediante el objeto DOMDocument, recorreremos el contenido y buscaremos todos los enlaces que existan.
Lo primero que necesitaremos será la función con la que obtener el contenido de la URL:
function getUrlContent( $url ){ $ch = curl_init(); curl_setopt( $ch , CURLOPT_URL, $url ); curl_setopt( $ch , CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)' ); curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1); curl_setopt( $ch , CURLOPT_CONNECTTIMEOUT, 5); curl_setopt( $ch , CURLOPT_TIMEOUT, 5); $data = curl_exec( $ch ); $httpcode = curl_getinfo( $ch , CURLINFO_HTTP_CODE); curl_close( $ch ); return ( $httpcode >=200 && $httpcode <300) ? $data : false; } |
A continuación desarrollamos la función que recorre el contenido y guarda en un array las direcciones de todos los enlaces que se encuentre:
function getUrls( $url ){ // obtenemos el contenido de la url $content = getUrlContent( $url ); if ( $content ==false){ return false; } // creamos el array de resultados $urls = array (); // creamos una instanacia a DOMDocument $doc = new DOMDocument; $doc ->preserveWhiteSpace = false; // cargamos la pagina web desdecargada desde la función getUrlContent() @ $doc ->loadHTML( $content ); // buscamos todos los tags del tipo < a > $links = $doc ->getElementsByTagName( "a" ); // recorremos cada uno de los tags encontrados foreach ( $links as $link ){ // obtenemos la parte href de la etiqueta $href = $link ->getAttribute( "href" ); if ( strlen ( $href )>=4 && substr ( $href ,0,4)== "http" ){ // url entera $urls [] = $href ; } else if ( strlen ( $href )>0 && substr ( $href , 0, 1)== "/" ){ // url empieza por / le añadimos el dominio por delante $urls [] = $url . $href ; } else { // arhivo $urls [] = $url . '/' . $href ; } } // eliminamos duplicados $urls = array_unique ( $urls ); // ordenamos alfabéticamente sort( $urls ); return $urls ; } |
// especificamos la url // obtenemos las url $urls = getUrls( $url ); // mostramos los resultados if ( $urls ==false){ echo "La página no es correcta, o es una redirección." ; } else { echo nl2br (implode( $urls , "\n" )); } |