Foros del Web » Programando para Internet » PHP »

Comprobar y buscar todos los enlaces rotos de un URL...y que devuelva un mensage!

Estas en el tema de Comprobar y buscar todos los enlaces rotos de un URL...y que devuelva un mensage! en el foro de PHP en Foros del Web. Hola amigos, Leyendo de aquí y de allá, he conseguido hacer este script que lee el URL que le indiques e imprime los enlaces rotos ...
  #1 (permalink)  
Antiguo 10/06/2010, 08:36
 
Fecha de Ingreso: diciembre-2003
Mensajes: 157
Antigüedad: 20 años, 11 meses
Puntos: 1
Comprobar y buscar todos los enlaces rotos de un URL...y que devuelva un mensage!

Hola amigos,

Leyendo de aquí y de allá, he conseguido hacer este script que lee el URL que le indiques e imprime los enlaces rotos que contenga susodicho URL:

Código PHP:
<?php
function hyperlinkextract($s1,$s2,$s){
    
$myarray=array();    
    
$s1=strtolower($s1);
    
$s2=strtolower($s2); 
    
$l1=strlen($s1);
    
$l2=strlen($s2);     
    
$scheck=strtolower($s);
        do{ 
$pos1 strpos($scheck,$s1);
              if(
$pos1!==false){
                
$pos2 strpos(substr($scheck,$pos1+$l1),$s2);
                if(
$pos2!==false){ 
                    
$myarray[]=substr($s,$pos1+$l1,$pos2);
                      
$s=substr($s,$pos1+$l1+$pos2+$l2);
                      
$scheck=strtolower($s);
            }
        }
    } while ((
$pos1!==false)and($pos2!==false)); return $myarray
}

function 
ComprobarEnlaces($EnlaceVAR){
    
$enlace $EnlaceVAR;
    
$content file_get_contents($enlace);
    
$myarray hyperlinkextract("<a href=\"","\"",$content);
    
    foreach(
$myarray as $key => $url) {
        
$fp=@fopen($url,"r");
        if(
$fp){
             echo 
'';
        }else if (
$url == '#'){
             echo 
'';
        }else{
             echo 
'<p></br>En: <a href="'.$enlace.'">'.$enlace.'</a></br>No funciona: <a href="'.$url.'">'.$url.'</a></p>';
        }
        @
fclose($fp);
    }
}

ComprobarEnlaces("http://www.lawebquequieras.com"); /*AQUI LLAMAMOS AL ENLACE A COMPROBAR*/
?>
Por cierto, el código sólo funciona con enlaces absolutos (tipo <a href="http://www.laweb.com/bla/bla..."</a>).

El caso es que me gustaría que si el URL tiene todos los enlaces válidos, me devolviese un mensage tipo "<p>Todos los enlaces están correctos!</p>",
y no consigo hacerlo, ¿alguna ayuda o idea?

Gracias!
  #2 (permalink)  
Antiguo 10/06/2010, 08:45
 
Fecha de Ingreso: diciembre-2008
Ubicación: Vigo, Spain
Mensajes: 141
Antigüedad: 15 años, 11 meses
Puntos: 12
Respuesta: Comprobar y buscar todos los enlaces rotos de un URL...y que devuelva un m

Con un switch me parece que podrías hacerlo, inicializas el switch a 0, cuando consiga un enlace roto lo cambie a 1, y si al final sigue a 0 es que todos los enlaces están bien.

Saludos.
  #3 (permalink)  
Antiguo 10/06/2010, 08:50
 
Fecha de Ingreso: diciembre-2003
Mensajes: 157
Antigüedad: 20 años, 11 meses
Puntos: 1
Respuesta: Comprobar y buscar todos los enlaces rotos de un URL...y que devuelva un m

Cita:
Iniciado por Annoying Ver Mensaje
Con un switch me parece que podrías hacerlo, inicializas el switch a 0, cuando consiga un enlace roto lo cambie a 1, y si al final sigue a 0 es que todos los enlaces están bien.

Saludos.
Mmm...alguna idea más? donde iría este switch? Voy a investigar...la verdad es que estoy un poco lento hoy...
  #4 (permalink)  
Antiguo 10/06/2010, 08:55
Avatar de quike88  
Fecha de Ingreso: agosto-2008
Mensajes: 471
Antigüedad: 16 años, 3 meses
Puntos: 87
Respuesta: Comprobar y buscar todos los enlaces rotos de un URL...y que devuelva un m

como dice Annoying pones una variable al comienzo de tu función ej:

$flag=0;

Si encuentras algún link roto le asignas el valor 1 a tu variable, y al final compruebas si la variable quedo en 0 significa q no hay links rotos, y si esta en 1 significa q si los hay.
  #5 (permalink)  
Antiguo 10/06/2010, 09:04
 
Fecha de Ingreso: diciembre-2008
Ubicación: Vigo, Spain
Mensajes: 141
Antigüedad: 15 años, 11 meses
Puntos: 12
Respuesta: Comprobar y buscar todos los enlaces rotos de un URL...y que devuelva un m

Cita:
Iniciado por tonimito Ver Mensaje
Mmm...alguna idea más? donde iría este switch? Voy a investigar...la verdad es que estoy un poco lento hoy...
Código PHP:
Ver original
  1. <?php
  2. function hyperlinkextract($s1,$s2,$s){
  3.     $myarray=array();    
  4.     $s1=strtolower($s1);
  5.     $s2=strtolower($s2);  
  6.     $l1=strlen($s1);
  7.     $l2=strlen($s2);      
  8.     $scheck=strtolower($s);
  9.         do{ $pos1 = strpos($scheck,$s1);
  10.               if($pos1!==false){
  11.                 $pos2 = strpos(substr($scheck,$pos1+$l1),$s2);
  12.                 if($pos2!==false){  
  13.                     $myarray[]=substr($s,$pos1+$l1,$pos2);
  14.                       $s=substr($s,$pos1+$l1+$pos2+$l2);
  15.                       $scheck=strtolower($s);
  16.             }
  17.         }
  18.     } while (($pos1!==false)and($pos2!==false)); return $myarray;  
  19. }
  20.  
  21. function ComprobarEnlaces($EnlaceVAR){
  22.     $enlace = $EnlaceVAR;
  23.     $content = file_get_contents($enlace);
  24.     $myarray = hyperlinkextract("<a href=\"","\"",$content);
  25.     $switch=0;
  26.     foreach($myarray as $key => $url) {
  27.         $fp=@fopen($url,"r");
  28.         if($fp){
  29.              echo '';
  30.         }else if ($url == '#'){
  31.              echo '';
  32.         }else{
  33.              echo '<p></br>En: <a href="'.$enlace.'">'.$enlace.'</a></br>No funciona: <a href="'.$url.'">'.$url.'</a></p>';
  34.              $switch = 1;
  35.         }
  36.         @fclose($fp);
  37.     }
  38.     if($switch==0)
  39.           echo "<p>Todos los enlaces están correctos!</p>";
  40. }
  41.  
  42. ComprobarEnlaces("http://www.lawebquequieras.com"); /*AQUI LLAMAMOS AL ENLACE A COMPROBAR*/
  43. ?>

Algo así podría servir me parece.
  #6 (permalink)  
Antiguo 10/06/2010, 09:12
 
Fecha de Ingreso: diciembre-2003
Mensajes: 157
Antigüedad: 20 años, 11 meses
Puntos: 1
Respuesta: Comprobar y buscar todos los enlaces rotos de un URL...y que devuelva un m

Muchisimas gracias Annoying!!!

Funciona a la perfección!

La verdad es que la solución era bien sencilla...tenía la mente nublada!

Muchisimas gracias de veras!
  #7 (permalink)  
Antiguo 10/06/2010, 11:35
 
Fecha de Ingreso: diciembre-2003
Mensajes: 157
Antigüedad: 20 años, 11 meses
Puntos: 1
Respuesta: Comprobar y buscar todos los enlaces rotos de un URL...y que devuelva un m

Lo he perfeccionado, para que no recoja los enlaces a las cuentas de email ni los enlaces #. Aquí lo dejo, por si alguien lo necesita algún día :).

Código PHP:
<?php 
function hyperlinkextract($s1,$s2,$s){ 
    
$myarray=array();     
    
$s1=strtolower($s1); 
    
$s2=strtolower($s2);  
    
$l1=strlen($s1); 
    
$l2=strlen($s2);      
    
$scheck=strtolower($s); 
        do{ 
$pos1 strpos($scheck,$s1); 
              if(
$pos1!==false){ 
                
$pos2 strpos(substr($scheck,$pos1+$l1),$s2); 
                if(
$pos2!==false){  
                    
$myarray[]=substr($s,$pos1+$l1,$pos2); 
                      
$s=substr($s,$pos1+$l1+$pos2+$l2); 
                      
$scheck=strtolower($s); 
            } 
        } 
    } while ((
$pos1!==false)and($pos2!==false)); return $myarray;  

 
function 
ComprobarEnlaces($EnlaceVAR){ 
    
$enlace $EnlaceVAR;
    
$content file_get_contents($enlace);
    
$myarray hyperlinkextract("<a href=\"","\"",$content);
    
$switch=0;
    foreach(
$myarray as $key => $url) { 
        
$fp=@fopen($url,"r"); 
        if(
$fp){ 
             echo 
''
        }else if (
preg_match('/#/'$url)){ 
             echo 
'';
        }else if (
preg_match('/mailto:/'$url)) { 
             echo 
''
        }else{ 
             echo 
'<p></br>En: <a href="'.$enlace.'">'.$enlace.'</a> / No funciona: <a href="'.$url.'">'.$url.'</a></p>';
             
$switch 1;
        } 
        @
fclose($fp); 
    }
    if(
$switch==0){
          echo 
"<p><strong>Todos los enlaces son correctos!</strong></p>";
    }
}
?>

Etiquetas: comprobar, enlaces, rotos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:50.