Foros del Web » Programando para Internet » PHP »

Tiempo de ejecusión excedido como evitarlo?

Estas en el tema de Tiempo de ejecusión excedido como evitarlo? en el foro de PHP en Foros del Web. Buen día foreros. he creado un aplicación para un concuro donde se asignan números adicionales a los participantes, el problema es que son más de ...
  #1 (permalink)  
Antiguo 16/05/2009, 09:11
 
Fecha de Ingreso: mayo-2008
Mensajes: 489
Antigüedad: 15 años, 11 meses
Puntos: 8
Pregunta Tiempo de ejecusión excedido como evitarlo?

Buen día foreros.

he creado un aplicación para un concuro donde se asignan números adicionales a los participantes, el problema es que son más de 1000 concursantes y el sistema alcanza a asignar 60 nuevos numeros antes de que aparezca el mensaje "Fatal error: Maximum execution time of 30 seconds exceeded in ...."

que debo hacer?

el script es el siguiente:

Código php:
Ver original
  1. <?
  2. if (!empty($_GET['id'])) {
  3.  $id = $_GET['id'];
  4.  
  5.  $sql = mysql_query("SELECT * FROM num_sorteo WHERE id_concurso='".$id."' GROUP BY user");
  6.   while($row = mysql_fetch_array($sql)) {
  7.    $user_id= $row['user'];
  8.  
  9.    $numero = range (-1,10000);
  10.    $numero = implode (', ', $numero);
  11.    $numero = str_replace(", 0,","",$numero);
  12.    $numero = str_replace("-1","",$numero);
  13.    $numero = str_replace(" 10000","",$numero);
  14.  
  15.    $sql_2 = mysql_query("SELECT * FROM num_sorteo WHERE id_concurso='".$id."'");
  16.     while($row_2 = mysql_fetch_array($sql_2)) {
  17.      $numero = str_replace(" ".$row_2['num'].",","",$numero);
  18.     }
  19.    mysql_free_result($sql_2);
  20.  
  21.    $dato = explode (", ", $numero);
  22.  
  23.    if (count($dato)!==1) {
  24.     $datoAleatorio=array_rand($dato,2);
  25.     for($i=1; $i<=count($datoAleatorio); $i++){
  26.      $num = $dato[$datoAleatorio[$i]];
  27.      $ok = mysql_query("INSERT INTO num_sorteo (id_concurso, user, num, numero) VALUES ('$id', '$user_id', '$num', '$num')");
  28.      mysql_query("DELETE FROM num_sorteo WHERE id_concurso='0'");
  29.     }
  30.    }
  31.   }

Gracias de antemano.
  #2 (permalink)  
Antiguo 16/05/2009, 10:45
Avatar de jeansalas19  
Fecha de Ingreso: junio-2006
Mensajes: 20
Antigüedad: 17 años, 10 meses
Puntos: 0
Respuesta: Tiempo de ejecusión excedido como evitarlo?

Primero que todo no deberías hacer un select dentro de otro Select... es una mala practica entre desarrolladores porque se puede volver muy lento el proceso y a si mismo el cargar de la pagina, te recomiendo que utilices un Inner Join de SQL, por otra parte si lo que quieres es quitar el limite de tiempo solo pon la siguiente linea de código al inicio de tu pagina:

Código PHP:
set_time_limit  (0
esto hará que tu pagina dure lo que sea para cargar, pero cargara.
  #3 (permalink)  
Antiguo 16/05/2009, 16:08
 
Fecha de Ingreso: mayo-2008
Mensajes: 489
Antigüedad: 15 años, 11 meses
Puntos: 8
Respuesta: Tiempo de ejecusión excedido como evitarlo?

Muchas Gracias jeansalas19, empezaré a leer lo de inner Join porque es muy comun que haga select dentro de select. por otro lado utilizaré el código que colocaste. muchas gracias
  #4 (permalink)  
Antiguo 18/05/2009, 10:20
 
Fecha de Ingreso: mayo-2008
Mensajes: 489
Antigüedad: 15 años, 11 meses
Puntos: 8
Respuesta: Tiempo de ejecusión excedido como evitarlo?

Hola de nuevo, he probado la solucion de set_time_limit(0); pero lo unico que logre fue duplicar la cantidad de numeros asignados antes de que muestre un error, ahora el mensaje es el siguiente:

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, [email protected] and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

encontre esto en este foro pero no lo entiendo. http://www.forosdelweb.com/f18/error...4/#post2808933
alguien me podría decir si me sirve y como aplicarlo.

muchas gracias nuevamente
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 15:34.