Foros del Web » Programando para Internet » PHP »

eliminar enlaces offline

Estas en el tema de eliminar enlaces offline en el foro de PHP en Foros del Web. Hola, necesito una gran ayuda... Tengo una web protectora de enlaces, por lo que en la base de datos se almacenan las url protegidas en ...
  #1 (permalink)  
Antiguo 22/05/2012, 01:57
 
Fecha de Ingreso: abril-2012
Mensajes: 88
Antigüedad: 12 años
Puntos: 1
Pregunta eliminar enlaces offline

Hola, necesito una gran ayuda... Tengo una web protectora de enlaces, por lo que en la base de datos se almacenan las url protegidas en el campo link, lo que deseo es un script php que me permita comprobar el estado de esos enlaces en linea, no de los enlaces protegidos, sino de los enlaces originales almacenados en la base de datos en el campo link, y de estar fuera de linea, que elimine el registro correspondiente en la base de datos...

Ejemplo:

protejo el enlace www.mega.com, la url protectora sería www.misitio.com?id=29209290; lo que deseo es diariamente revisar el enlace original, en este caso sería www.mega.com y si esta fuera de linea eliminarlo quedando fuera de linea la url www.misitio.com?id=29209290 la cual mostrara una pagina de error... Saludos
  #2 (permalink)  
Antiguo 22/05/2012, 07:46
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 12 años, 5 meses
Puntos: 160
Respuesta: eliminar enlaces offline

vas a tener que usar un cron para ejecutar el script diariamente y dependiendo del servidor windows o linux va a ser mas facil o no (facil en linux)

ahora bien, no existe actualmente segun creo yo algo que te resuelva en forma automatica si una url esta online o no, se puede hacer algo utilizando curl para veri si el sitio existe o no por ejemplo, no se si es lo mas confiable del mundo, pero es algo como para empezar

fijate el ejemplo que muestra en php.net para el uso de curl_errno(), vos modificalo para que en caso de error te haga el delete en la base de datos
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #3 (permalink)  
Antiguo 23/05/2012, 02:08
 
Fecha de Ingreso: abril-2012
Mensajes: 88
Antigüedad: 12 años
Puntos: 1
Respuesta: eliminar enlaces offline

Cita:
Iniciado por linuxzero Ver Mensaje
vas a tener que usar un cron para ejecutar el script diariamente y dependiendo del servidor windows o linux va a ser mas facil o no (facil en linux)

ahora bien, no existe actualmente segun creo yo algo que te resuelva en forma automatica si una url esta online o no, se puede hacer algo utilizando curl para veri si el sitio existe o no por ejemplo, no se si es lo mas confiable del mundo, pero es algo como para empezar

fijate el ejemplo que muestra en php.net para el uso de [URL="http://www.php.net/manual/es/function.curl-errno.php"]curl_errno()[/URL], vos modificalo para que en caso de error te haga el delete en la base de datos
Quizas puedas ayudarme creando un codigo... Así iría entendiendo más o menos por cual es el camino a seguir... Saludos...
  #4 (permalink)  
Antiguo 23/05/2012, 07:57
Avatar de webseficientes  
Fecha de Ingreso: enero-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 320
Antigüedad: 19 años, 2 meses
Puntos: 14
Respuesta: eliminar enlaces offline

Para verificar que una web esta funcionando ok podrias leer el html de una de las paginas, tiene que ser un html "conocido" el que buscas.

Si esta es texto buscado, todo va bien, sino, es por que la web tuvo algún cambio o problema.

Opciones tenes muchas y funciones también, como decia el amigo, curl es una opción.

también tenes file_get_contens, y muchas otras para leer archivos y urls.

Suerte.
__________________
Gerardo Benitez
Programador Web Freelance, SEO, Diseño web
  #5 (permalink)  
Antiguo 23/05/2012, 08:37
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: eliminar enlaces offline

lo mejor sería hacerlo con curl, y la función que ha mencionado linuxzero queda perfecta!

Creo que no hace falta hacer el cron, puedes comprobar las urls antes de mostrarlas en la página, puedes probar a hacer llamadas curl y luego consultar si hay error con curl_errno, como dijo linuxzero, si hay error, no muestras el enlace y además lo eliminas de la BD.

eso si, se que hay otra forma más rápida de comprobar que he usado antes, pero no recuerdo cual era, pero era algo así como un ping a la página que devolvía true si existía y false si no... la buscaré

------------------- editado ------------------

Encontrado, una opción es usar exec con ping, algo así:

Código PHP:
Ver original
  1. $exec = exec("ping -n 3 -l 64 ".$url);

Pero encontré una mejor en php.net:

Código PHP:
Ver original
  1. $outputShell = shell_exec("ping -c 2 -w 2 ".$url);
  2. if(strpos($outputShell, '0 received')){
  3. // No se recibió respuesta, el servidor está out
  4. }else{
  5. // Se recibió respuesta, el servidor está online
  6. }

(en windows 7 reemplazar "-c 2" por "-n 2"
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D

Última edición por stramin; 23/05/2012 a las 08:46
  #6 (permalink)  
Antiguo 23/05/2012, 11:05
 
Fecha de Ingreso: abril-2012
Mensajes: 88
Antigüedad: 12 años
Puntos: 1
Respuesta: eliminar enlaces offline

Cita:
Iniciado por stramin Ver Mensaje
lo mejor sería hacerlo con curl, y la función que ha mencionado linuxzero queda perfecta!

Creo que no hace falta hacer el cron, puedes comprobar las urls antes de mostrarlas en la página, puedes probar a hacer llamadas curl y luego consultar si hay error con curl_errno, como dijo linuxzero, si hay error, no muestras el enlace y además lo eliminas de la BD.

eso si, se que hay otra forma más rápida de comprobar que he usado antes, pero no recuerdo cual era, pero era algo así como un ping a la página que devolvía true si existía y false si no... la buscaré

------------------- editado ------------------

Encontrado, una opción es usar exec con ping, algo así:

Código PHP:
Ver original
  1. $exec = exec("ping -n 3 -l 64 ".$url);

Pero encontré una mejor en php.net:

Código PHP:
Ver original
  1. $outputShell = shell_exec("ping -c 2 -w 2 ".$url);
  2. if(strpos($outputShell, '0 received')){
  3. // No se recibió respuesta, el servidor está out
  4. }else{
  5. // Se recibió respuesta, el servidor está online
  6. }

(en windows 7 reemplazar "-c 2" por "-n 2"

Muchas gracias, pero no me ha funcionado, todo enlace sea roto o no sale online,
yo más bien creo que la solución es reconocer un html como se explico más arriba, lo que no entiendo es como utilizar dicha función por lo que necesito así mismo un codigo inicial para orientarme, es urgente.... Saludos
  #7 (permalink)  
Antiguo 23/05/2012, 11:06
 
Fecha de Ingreso: abril-2012
Mensajes: 88
Antigüedad: 12 años
Puntos: 1
Respuesta: eliminar enlaces offline

Cita:
Iniciado por webseficientes Ver Mensaje
Para verificar que una web esta funcionando ok podrias leer el html de una de las paginas, tiene que ser un html "conocido" el que buscas.

Si esta es texto buscado, todo va bien, sino, es por que la web tuvo algún cambio o problema.

Opciones tenes muchas y funciones también, como decia el amigo, curl es una opción.

también tenes file_get_contens, y muchas otras para leer archivos y urls.

Suerte.
Hola Ayúdame creando un pequeño código explicado para orientarme... Saludos...
  #8 (permalink)  
Antiguo 23/05/2012, 13:46
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: eliminar enlaces offline

En ese caso averigua sobre ambas funciones, no son difíciles de ocupar, revisa la documentación, aquí en el foro o en php.net

Libreria curl: http://php.net/manual/es/book.curl.php
Ejemplo: http://php.net/manual/es/curl.examples-basic.php

Funcion file_get_contents: http://cl.php.net/manual/es/function...t-contents.php

La otra forma que menciona webseficientes es la clase httpRequest: http://php.net/manual/es/class.httprequest.php

y la función http_request: http://cl.php.net/manual/es/function.http-request.php

Para más información puedes siempre recurrir al util aporte de abimaelrc: http://www.forosdelweb.com/f18/aport...equest-724214/
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #9 (permalink)  
Antiguo 23/05/2012, 15:31
 
Fecha de Ingreso: abril-2012
Mensajes: 88
Antigüedad: 12 años
Puntos: 1
Respuesta: eliminar enlaces offline

He avanzado mucho, pero aun no consigo lograrlo

1.- Este código obtiene los enlaces de www.ejemplo.com de acuerdo a la etiqueta <a href=""></a>:

Código PHP:
<?php
$html 
file_get_contents('www.ejemplo.com');
function 
extract_links($html) {
    
$links = array();
    
preg_match_all('/<a\s+.*?href=[\"\']?([^\"\' >]*)[\"\']?[^>]*>(.*?)<\/a>/i'$html,$matches,PREG_SET_ORDER);
    foreach(
$matches as $match) {
        
$links[] = array($match[1],$match[2]);
    }
    return 
$links;
}
$links extract_links($html);
foreach (
$links as $link) {
    echo 
$link[0] . PHP_EOL;
}
?>
,pero como hago para obtener otro tipo de etiquetas como input, img, etc?


2.- Esto me mostrara todos los <a href=""></a> existentes dicha página, pero cuando la página (www.ejemplo.com) tiene un iframe que llama a otra página que le provee enlaces aleatorios, como hago para obtener tambien esos enlaces (<a href=""></a>) desde www.ejemplo.com?


Sabiendo esto podría estoy muy cerca de lo que desearía hacer!

Última edición por manuel__7; 23/05/2012 a las 15:39
  #10 (permalink)  
Antiguo 23/05/2012, 15:39
 
Fecha de Ingreso: abril-2012
Mensajes: 88
Antigüedad: 12 años
Puntos: 1
Respuesta: eliminar enlaces offline

He avanzado mucho, pero aun no consigo lograrlo

1.- Este código obtiene los enlaces de www.ejemplo.com de acuerdo a la etiqueta <a href=""></a>:

Código PHP:
<?php
$html 
file_get_contents('www.ejemplo.com');
function 
extract_links($html) {
    
$links = array();
    
preg_match_all('/<a\s+.*?href=[\"\']?([^\"\' >]*)[\"\']?[^>]*>(.*?)<\/a>/i'$html,$matches,PREG_SET_ORDER);
    foreach(
$matches as $match) {
        
$links[] = array($match[1],$match[2]);
    }
    return 
$links;
}
$links extract_links($html);
foreach (
$links as $link) {
    echo 
$link[0] . PHP_EOL;
}
?>
,pero como hago para obtener otro tipo de etiquetas como input, img, etc?


2.- Esto me mostrara todos los <a href=""></a> existentes dicha página, pero cuando la página (www.ejemplo.com) tiene un iframe que llama a otra página que le provee enlaces aleatorios, como hago para obtener tambien esos enlaces (<a href=""></a>) desde www.ejemplo.com?


Sabiendo esto podría estoy muy cerca de lo que desearía hacer!
  #11 (permalink)  
Antiguo 23/05/2012, 15:40
 
Fecha de Ingreso: abril-2012
Mensajes: 88
Antigüedad: 12 años
Puntos: 1
Respuesta: eliminar enlaces offline

Cita:
Iniciado por stramin Ver Mensaje
En ese caso averigua sobre ambas funciones, no son difíciles de ocupar, revisa la documentación, aquí en el foro o en php.net

Libreria curl: [url]http://php.net/manual/es/book.curl.php[/url]
Ejemplo: [url]http://php.net/manual/es/curl.examples-basic.php[/url]

Funcion file_get_contents: [url]http://cl.php.net/manual/es/function.file-get-contents.php[/url]

La otra forma que menciona webseficientes es la clase httpRequest: [url]http://php.net/manual/es/class.httprequest.php[/url]

y la función http_request: [url]http://cl.php.net/manual/es/function.http-request.php[/url]

Para más información puedes siempre recurrir al util aporte de abimaelrc: [url]http://www.forosdelweb.com/f18/aporte-file_get_contents-curl-http_request-724214/[/url]
He avanzado mucho, pero aun no consigo lograrlo

1.- Este código obtiene los enlaces de www.ejemplo.com de acuerdo a la etiqueta <a href=""></a>:

Código PHP:
<?php
$html 
file_get_contents('www.ejemplo.com');
function 
extract_links($html) {
    
$links = array();
    
preg_match_all('/<a\s+.*?href=[\"\']?([^\"\' >]*)[\"\']?[^>]*>(.*?)<\/a>/i'$html,$matches,PREG_SET_ORDER);
    foreach(
$matches as $match) {
        
$links[] = array($match[1],$match[2]);
    }
    return 
$links;
}
$links extract_links($html);
foreach (
$links as $link) {
    echo 
$link[0] . PHP_EOL;
}
?>
,pero como hago para obtener otro tipo de etiquetas como input, img, etc?


2.- Esto me mostrara todos los <a href=""></a> existentes dicha página, pero cuando la página (www.ejemplo.com) tiene un iframe que llama a otra página que le provee enlaces aleatorios, como hago para obtener tambien esos enlaces (<a href=""></a>) desde www.ejemplo.com?


Sabiendo esto podría estoy muy cerca de lo que desearía hacer!

Etiquetas: enlaces, links, url
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:34.