Para la optimización del código .. como te mencioné desde un principio .. usando preg_match_all():
Código PHP:
<?
$url = "http://www.php.net/manual/es/";
$html = Implode("", File($url));
preg_match_all("/<a[[:space:]]+href[[:space:]]*=[[:space:]]*[\"']{0,1}([^\"'> ]+)/i",$html,$links_url,PREG_SET_ORDER);
preg_match_all("|>([^<]*)</a|i",$html,$links_descripcion,PREG_SET_ORDER);
for ($i=0;$i<count($links_url);$i++){
echo "<A HREF=\"".$links_url[$i][1]."\">".$links_descripcion[$i][1]."</A><BR>\n";
}
echo "<br>total links leidos: ".$i;
?>
En el ejemplo se leen 242 links extraidos entre HTML común ... lo procesó en: 0.0988030433655 segundos aprox. en mi PC "servidor" AMD K6-2 a 350MHz de la época xD...
(abriendo el fichero .. con mi kka de conexion modem 56K acceso comuntado corriente: 5.03578197956 segundos aprox.)
.. No es perfecta todavía la expresion regular .. habria q refinarla .. pero funciona bastan bien .. (por si acaso .. el código no es mio .. por lo menos las exp. regulares .. las saque de google .. aqui y allá xD).
---------------------
Sobre lo de comprobar si un URL es valido o no .. se hace via sockets conectando por HTTP directo .. y leyendo el error q devuelve (un 500 o un 404 por ejemplo algo distinto al 200 creo q es el q fué correcta la conexión) ..
Aquí tienes algunos:
http://www.hotscripts.com/PHP/Script...Link_Checking/
(para q te fijes en el código) ...
Un saludo,