Foros del Web » Programando para Internet » PHP »

Repetir la consulta si fallase hasta que salga bien

Estas en el tema de Repetir la consulta si fallase hasta que salga bien en el foro de PHP en Foros del Web. Hola. Estoy trabajando con un código que lee un XML. Funciona perfecto pero lo que pasa es que a veces tarda en leer el xml ...
  #1 (permalink)  
Antiguo 24/02/2011, 09:11
 
Fecha de Ingreso: enero-2011
Ubicación: España
Mensajes: 17
Antigüedad: 13 años, 3 meses
Puntos: 0
Repetir la consulta si fallase hasta que salga bien

Hola. Estoy trabajando con un código que lee un XML. Funciona perfecto pero lo que pasa es que a veces tarda en leer el xml y da error la consulta.

$xml = simpleXML_load_file($xml_file,"SimpleXMLElement",L IBXML_NOCDATA);
if($xml === FALSE)
{ exit('Error al intentar abrir el fichero '.$xml_file); }
{ else ...lo que sea...}

Cuando falla la consulta simplemente como tengo puesto exit, acaba el php y muestra el error.

¿Hay forma de decirle que en caso de error lo lea por ejemplo hasta 5 veces hasta que en cualquiera de esas veces termine de ejecutar bien la consulta?.

Muchas gracias
  #2 (permalink)  
Antiguo 24/02/2011, 09:18
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: Repetir la consulta si fallase hasta que salga bien

Saludos

Cual es el error?
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #3 (permalink)  
Antiguo 24/02/2011, 09:19
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 10 meses
Puntos: 641
Respuesta: Repetir la consulta si fallase hasta que salga bien

Si tarda mucho en leerlo, es por el tiempo de ejecucion de la consulta, normalment es de 60 segundos, si lo tienes en localhost, se puede alterar ese tiempo, pero si lo tienes en un servidor web, la cosa es un poco más complicada.

la segunda parte podrias combinar un ciclo con las condicionales.
  #4 (permalink)  
Antiguo 24/02/2011, 09:23
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: Repetir la consulta si fallase hasta que salga bien

por que haces un if??
si solo tenes que recorrer el xml con un foreach
  #5 (permalink)  
Antiguo 24/02/2011, 09:26
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 10 meses
Puntos: 641
Respuesta: Repetir la consulta si fallase hasta que salga bien

segun lo que dice ahi, usa el if para que salte un error de que no se pudo abrir.
  #6 (permalink)  
Antiguo 24/02/2011, 09:37
 
Fecha de Ingreso: enero-2011
Ubicación: España
Mensajes: 17
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Repetir la consulta si fallase hasta que salga bien

Gracias a todos por responder

El error es que no puede leer el archivo de origen.

Vale me puedo saltar el if, pero es que no quiero que siga con el código si no es capaz de leer el archivo porque no tendría sentido hacerlo.

Es por eso que quisiera decirle que si no puede abrirlo lo reintente varias veces hasta que lo logre.

¿Alguna idea? Gracias
  #7 (permalink)  
Antiguo 24/02/2011, 10:35
 
Fecha de Ingreso: enero-2011
Ubicación: España
Mensajes: 17
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Repetir la consulta si fallase hasta que salga bien

Creo que lo he resuelto. Sería así:

$xml = simpleXML_load_file($xml_file,"SimpleXMLElement",L IBXML_NOCDATA);
if($xml === FALSE)
{

for($i=0 ; $i<5 ; $i++)
{
header("Location: http://www.miweb.com/ifase.php");
}


exit('Error al intentar abrir el fichero '.$xml_file); }

De este modo si alguna vez no carga el xml, recargará la página actual y de nuevo lo intentará. Hará esta misma operación si falla hasta 5 veces. Si tras la quinta falla de nuevo, entonces mostrará el error y finalizará.
  #8 (permalink)  
Antiguo 24/02/2011, 11:03
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: Repetir la consulta si fallase hasta que salga bien

Saludos

Yo creería que no funciona, se quedaría pegado. Deberías pasarle por get el valor de contador en el que va

Código PHP:
Ver original
  1. $xml = simpleXML_load_file($xml_file,"SimpleXMLElement",L IBXML_NOCDATA);
  2. if($xml === FALSE)
  3. {
  4.  
  5. $valor=0;
  6. $secuncia=$valor+$valorGet;
  7.  
  8. if($secuncia<=5){
  9.  $valorGet++;
  10.  header("Location: http://www.miweb.com/ifase.php?valor=$valorGet");
  11. }
  12.  
  13. exit('Error al intentar abrir el fichero '.$xml_file);
  14. }
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #9 (permalink)  
Antiguo 24/02/2011, 11:10
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Repetir la consulta si fallase hasta que salga bien

y qué tal así?:
Código PHP:
Ver original
  1. $x=1;
  2. while(($xml = simpleXML_load_file($xml_file,"SimpleXMLElement",L IBXML_NOCDATA))===FALSE){
  3.  echo "$x Error al intentar abrir el fichero $xml_file";
  4.  $x++;
  5. }
(el $x es sólo para ver cuántas veces se equivocó, o también se puede agregar para controlar cuantas veces se quiere que reintente)

Ya que no estoy seguro, pero puede que redireccionando, firefox al notar que el sitio se llama a si mismo tantas veces lo cancele.
  #10 (permalink)  
Antiguo 24/02/2011, 12:59
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: Repetir la consulta si fallase hasta que salga bien

Saludos

Acabo de ver un error en el codigo que postie..

Código PHP:
Ver original
  1. $xml = simpleXML_load_file($xml_file,"SimpleXMLElement",L IBXML_NOCDATA);
  2. if($xml === FALSE)
  3. {
  4.  
  5. $valor=0;
  6. $valorGet=$_GET['valorGet'];
  7. $secuncia=$valor+$valorGet;
  8.  
  9. if($secuncia<=5){
  10.  $valorGet++;
  11.  header("Location: http://www.miweb.com/ifase.php?valorGet=$valorGet");
  12. }
  13.  
  14. exit('Error al intentar abrir el fichero '.$xml_file);
  15. }
__________________
:.:Nano.:: @nano_hard - Retornando al foro

Etiquetas: consulta, repetir
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:16.