Foros del Web » Programando para Internet » PHP »

Die y bucles: (Filtrar urls)

Estas en el tema de Die y bucles: (Filtrar urls) en el foro de PHP en Foros del Web. El siguiente script ejecuta un "die" en caso de un error 404 Not Found". Luego, mas adelante, $url se almacena en una variable que va ...
  #1 (permalink)  
Antiguo 02/03/2010, 15:20
Avatar de principiantedelphp  
Fecha de Ingreso: febrero-2010
Mensajes: 160
Antigüedad: 14 años, 8 meses
Puntos: 1
Die y bucles: (Filtrar urls)

El siguiente script ejecuta un "die" en caso de un error 404 Not Found". Luego, mas adelante, $url se almacena en una variable que va a la base de datos.

Cita:
PRINCIPIO DEL SCRIPT
................
................
................
$url = isset($_GET['url'])? $_GET['url']: '';
if(fopen($url,"r")){
echo "url valida";
}else{
die('url invalida');
}
...............
................
................
FIN DEL SCRIPT (VUELVE A PRINCIPIO DEL SCRIPT (bucle)
El problema es que reviso muchas urls de un archivo de texto. PREGUNTA: ¿Cómo puedo hacer para que, en caso de que se active el "die" en un script, el
bucle no se pare?? O, dicho de otra forma: ¿Cómo puedo hacer para que el script siga sin considerar la URL inexistente, es decir que no copie la URL Not Found a la base de datos pero que continue leyendo otras URLs?
Muchas Gracias

Última edición por principiantedelphp; 02/03/2010 a las 15:32
  #2 (permalink)  
Antiguo 02/03/2010, 15:39
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 8 meses
Puntos: 77
Respuesta: Die y bucles: (Filtrar urls)

bueno, die() detiene la ejecucion del script, asi que usando die simplemente no se puede

puedes hacer un echo para mostrar el mensaje y usar continue() para brincarte el resto del bloque de codigo
  #3 (permalink)  
Antiguo 02/03/2010, 15:44
Avatar de principiantedelphp  
Fecha de Ingreso: febrero-2010
Mensajes: 160
Antigüedad: 14 años, 8 meses
Puntos: 1
Respuesta: Die y bucles: (Filtrar urls)

O sea que con continue() el script sigue pero sin copiar la url a la base de datos?
  #4 (permalink)  
Antiguo 02/03/2010, 15:46
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 8 meses
Puntos: 77
Respuesta: Die y bucles: (Filtrar urls)

RTFM ...
  #5 (permalink)  
Antiguo 02/03/2010, 15:56
Avatar de principiantedelphp  
Fecha de Ingreso: febrero-2010
Mensajes: 160
Antigüedad: 14 años, 8 meses
Puntos: 1
Respuesta: Die y bucles: (Filtrar urls)

Bueno, tengo esta idea, no se si estoy en lo correcto:

Cita:
......
.....
PRINCIPIO DEL SCRIPT
................
................
................
$url = isset($_GET['url'])? $_GET['url']: '';
if(fopen($url,"r")){
echo "url valida";
}else{
die('url invalida');
VUELVA AL PRINCIPIO DEL SCRIPT!!!!!!!!!!! ¿COMO HAGO ESTE PASO? (En otros lenguaje de programacion se llama GOTO, GOSUB, etc.
}
...............
................
FIN DEL SCRIPT (VUELVE A PRINCIPIO DEL SCRIPT (bucle)
  #6 (permalink)  
Antiguo 02/03/2010, 16:31
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 17 años, 2 meses
Puntos: 20
Respuesta: Die y bucles: (Filtrar urls)

Creo que no leiste el link que te dejo darkasecas. Pero bueno, el die() termina la ejecucion de tu script, es decir, todo lo que pongas despues del die() no importa, ya que tu script se muere (die).

Lo que puedes hacer: Cada que una url te conteste con un codigo http 200, mete esa url a una pila (array) y al final recorres e insertas la pila de urls para insertarlo en la base de datos.
__________________
I see dead pixels
  #7 (permalink)  
Antiguo 02/03/2010, 16:49
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 9 meses
Puntos: 29
Respuesta: Die y bucles: (Filtrar urls)

Lo que este usuario busca es sustituir die('x');por break;
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #8 (permalink)  
Antiguo 02/03/2010, 16:57
Avatar de Carlmycol  
Fecha de Ingreso: diciembre-2007
Ubicación: Los Teques, Venezuela
Mensajes: 240
Antigüedad: 16 años, 11 meses
Puntos: 3
Respuesta: Die y bucles: (Filtrar urls)

No se si te sirve pero si quieres volver al inicio del script puedes hacerlo con un while

algo asi..
Código PHP:
$n=0;
while(
$n==0)
{
///script
//cuando quieras salir del bucle solo pon $n=1; y listo

Saludos
  #9 (permalink)  
Antiguo 02/03/2010, 17:02
Avatar de principiantedelphp  
Fecha de Ingreso: febrero-2010
Mensajes: 160
Antigüedad: 14 años, 8 meses
Puntos: 1
Respuesta: Die y bucles: (Filtrar urls)

A ver, esto hice, pero no resultó:

Cita:
.....
......
$lines = file('prueba.txt');
foreach ($lines as $line_num => $line) {
mt_srand (time());
$i = rand(40,60);
$media=$i/20;
$a=rand(3,150);
$url = $datos[0];
if(fopen($url,"r")){
echo "url valida";
}else{
break;
}
$nombre=$datos[1];
$descripcion=$datos[2];
$palabrasclaves=$datos[3];
$q = "INSERT INTO rank (media, a, nombre, descripcion, url, palabrasclaves) values ('$media', '$a', '$nombre', '$descripcion', '$url', '$palabrasclaves')";
$datos = explode("\t", $line);
mysql_query($q, $link);
}
mysql_close($link);
Pense que el break salia del bucle foreach y volvia a empezar arriba, pero me tira este error:
"Warning: fopen() [function.fopen]: Filename cannot be empty in C:\wamp\www\misitio\rank\filtrador.php on line 32
Por supuesto, si le saco esto:
Cita:
if(fopen($url,"r")){
echo "url valida";
}else{
break;
}
El codigo carga los datos sin problemas a la base de datos (con las url 404 Not Found incluidas).
  #10 (permalink)  
Antiguo 02/03/2010, 17:05
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 8 meses
Puntos: 77
Respuesta: Die y bucles: (Filtrar urls)

Cita:
Iniciado por CHuLoSoY Ver Mensaje
Lo que este usuario busca es sustituir die('x');por break;
En realidad no, ya que break termina el ciclo, y el solo quiere ignorar una iteracion.
  #11 (permalink)  
Antiguo 02/03/2010, 17:09
Avatar de principiantedelphp  
Fecha de Ingreso: febrero-2010
Mensajes: 160
Antigüedad: 14 años, 8 meses
Puntos: 1
Respuesta: Die y bucles: (Filtrar urls)

Claro, quiero que si la URL no existe, vuelva el bucle al principio. Simplemente eso.
  #12 (permalink)  
Antiguo 02/03/2010, 17:24
Avatar de principiantedelphp  
Fecha de Ingreso: febrero-2010
Mensajes: 160
Antigüedad: 14 años, 8 meses
Puntos: 1
Respuesta: Die y bucles: (Filtrar urls)

Bueno puse simplemente que si la url no existe entonces $url="" y luego uso un select en la base de datos para eliminar estas filas. Jeje, no se me ocurre otra cosa. Gracias por la ayuda.
  #13 (permalink)  
Antiguo 02/03/2010, 17:52
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 9 meses
Puntos: 29
Respuesta: Die y bucles: (Filtrar urls)

Cita:
Iniciado por darkasecas Ver Mensaje
En realidad no, ya que break termina el ciclo, y el solo quiere ignorar una iteracion.
Cierto, perdón, entonces tiene que jugar con continue;
¿estoy en lo cierto?

Saludos.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #14 (permalink)  
Antiguo 02/03/2010, 18:04
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 8 meses
Puntos: 77
Respuesta: Die y bucles: (Filtrar urls)

Cita:
Iniciado por CHuLoSoY Ver Mensaje
Cierto, perdón, entonces tiene que jugar con continue;
¿estoy en lo cierto?

Saludos.
Asi es, justo como dije desde mi primer post en este tema -_-
  #15 (permalink)  
Antiguo 02/03/2010, 19:39
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 17 años, 2 meses
Puntos: 20
Respuesta: Die y bucles: (Filtrar urls)

Que tal principantedelphp, creo que tu solucion a tu error esta un poco desatinada, imagina que tienes 10000 urls que verificar y por todas las urls haces un insert pero el 50% de ellas te regresa 404, tendrias que borrar al final el 50% de tus urls y eso consumiria mas tiempo de ejecución del script.

Desde mi punto de vista, creo que esta mejor crear una lista de las urls que si funcionan y al final del script haces un insert.

Saludos.
__________________
I see dead pixels
  #16 (permalink)  
Antiguo 02/03/2010, 21:07
Avatar de principiantedelphp  
Fecha de Ingreso: febrero-2010
Mensajes: 160
Antigüedad: 14 años, 8 meses
Puntos: 1
Respuesta: Die y bucles: (Filtrar urls)

Si, tienes razon SergeMedina. Mi problema está en los 60 segundos que espera el servidor para subir datos, luego, te dice "Error en tiempo de espera" o algo así y se corta la subida de datos. Es porque tiene que comprobar que cada url exista mientras va subiendo. Me ayudas con algo de código? Recuerda que: Leo con php un archivo de texto y lo subo a la base de datos y ahi es donde demora (son más de 20000 filas) porque tiene que comprobar error 404 not found.
Bueno gracias

Etiquetas: bucles, filtrar, 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 03:42.