Foros del Web » Programando para Internet » PHP »

Fatal error: Maximum execution time of 60 seconds exceeded

Estas en el tema de Fatal error: Maximum execution time of 60 seconds exceeded en el foro de PHP en Foros del Web. Buenas queridos amigos !! Este error se me ha venido dando desde hace mucho ! Si bien he leido por ahi que este error se ...
  #1 (permalink)  
Antiguo 20/04/2010, 06:13
 
Fecha de Ingreso: marzo-2008
Mensajes: 25
Antigüedad: 16 años, 1 mes
Puntos: 0
Fatal error: Maximum execution time of 60 seconds exceeded

Buenas queridos amigos !!
Este error se me ha venido dando desde hace mucho !
Si bien he leido por ahi que este error se arregla modificando el PHP.ini, la idea de este tema es para ver si alguien me puede dar una mano para hacer mas efectiva la consulta que esta haciendo que esto se tranqui y se exceda en segundos.
La idea es armar un Excel con una consulta, y es alli donde se tranca.
La base de datos tiene unos 20500 datos mas o menos, y, la consulta que estoy tirando me daria como resultado unos 4000 datos mas o menos.
A alguien se le ocurre alguna forma para mejorar la consulta que voy a pegar a continuacion y asi hacer mas rapida la transaccion ?

Muchas gracias !!!

Código PHP:
Ver original
  1. <?php
  2.     if($_GET){
  3.         unlink('./Temporal/ConsultaListadoResultadosBanred.xls');
  4.         header('Location:../Administracion/I_Administracion.php');
  5.     }else{
  6.         $tipo_reporte = $_POST['SelectReporte'];
  7.         $base = "banred" ;
  8.         include '../D_ConversionFecha.php';
  9.    
  10.         $fecha_des = $_POST['FechaDesde'];
  11.         $date_des=FechaASQL($fecha_des);
  12.         $date_des;
  13.         $fecha_has = $_POST['FechaHasta'];
  14.         $date_has = FechaASQL($fecha_has);
  15.         $date_has;
  16.    
  17.         if ($tipo_reporte == "ConsultaListadoResultados"){ //COMIENZA INFORME LISTADORESULTADOS
  18.             $shtml = "<table>";
  19.             $conn = mysql_connect("localhost","root","3ntradA");
  20.             $sql = "select cli.CodCliente, cli.TipoLlamada, cli.Nombre, cli.Telefono, cli.Interno, cont.CodContacto, cont.Fecha, cont.Hora, cont.Asesor, cont.Resultado, cont.Motivo, cont.Observaciones from cliente cli, contacto cont where cli.CodCliente=cont.CodCliente and Fecha between '$date_des' and '$date_has' and cont.CodContacto in (select max(CodContacto) maximo from contacto group by CodCliente)";
  21.             $rs = mysql_db_query($base,$sql);
  22.             $total_datos = mysql_num_rows($rs);
  23.             $i=0;
  24.        
  25.             while($fila = mysql_fetch_array($rs)){
  26.                 $CodCliente_[$i] = $fila['CodCliente'];
  27.                 $tipo_llamada[$i] = $fila['TipoLlamada'];
  28.                 $nombre_[$i] = $fila['Nombre'];
  29.                 $telefono_[$i] = $fila['Telefono'];
  30.                 $interno_[$i] = $fila['Interno'];
  31.                 $codcontacto_[$i] = $fila['CodContacto'];
  32.            
  33.                 $date=$fila['Fecha'];
  34.                 $date=FechaANormal($date);
  35.                 $fecha_[$i] = $date;
  36.            
  37.                 $hora_[$i] = $fila['Hora'];
  38.                 $asesor_[$i] = $fila['Asesor'];
  39.                 $resultado_[$i] = $fila['Resultado'];
  40.                 $motivo_[$i] = $fila['Motivo'];
  41.                 $observaciones_[$i] = $fila['Observaciones'];
  42.                 $i++;
  43.             }  
  44.            
  45.             $shtml=$shtml."<tr>";
  46.                 $shtml=$shtml."<td>CodCliente</td>";
  47.                 $shtml=$shtml."<td>TipoLlamada</td>";
  48.                 $shtml=$shtml."<td>Nombre</td>";
  49.                 $shtml=$shtml."<td>Telefono</td>";
  50.                 $shtml=$shtml."<td>Interno</td>";
  51.                 $shtml=$shtml."<td>CodContacto</td>";
  52.                 $shtml=$shtml."<td>Fecha</td>";
  53.                 $shtml=$shtml."<td>Hora</td>";
  54.                 $shtml=$shtml."<td>Asesor</td>";
  55.                 $shtml=$shtml."<td>Resultado</td>";
  56.                 $shtml=$shtml."<td>Motivo</td>";
  57.                 $shtml=$shtml."<td>Observaciones</td>";
  58.             $shtml=$shtml."</tr>";
  59.        
  60.             for($i=0;$i<$total_datos;$i++){
  61.                 $shtml=$shtml."<tr>";
  62.                 $shtml=$shtml."<td>".$CodCliente_[$i]."</td><td>".$tipo_llamada[$i]."</td><td>".$nombre_[$i]."</td><td>".$telefono_[$i]."</td><td>".$interno_[$i]."</td><td>".$codcontacto_[$i]."</td><td>".$fecha_[$i]."</td><td>".$hora_[$i]."</td><td>".$asesor_[$i]."</td><td>".$resultado_[$i]."</td><td>".$motivo_[$i]."</td><td>".$observaciones_[$i]."</td>";
  63.                 $shtmo=$shtm."</tr>";  
  64.             }
  65.             $shtml=$shtml."</table>";
  66.        
  67.        
  68.             $sfile="./Temporal/ConsultaListadoResultadosBanred.xls"; //ruta del archivo a generar
  69.             $fp=fopen($sfile,"w");
  70.             fwrite($fp,$shtml);
  71.             fclose($fp);
  72.             header('Location:./I_DescargarReporte.php?tipo='.$tipo_reporte);
  73.         } //FINALIZA INFORME LISTADORESULTADOS
  74.     }  
  75. ?>
  #2 (permalink)  
Antiguo 20/04/2010, 08:09
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 9 meses
Puntos: 70
Respuesta: Fatal error: Maximum execution time of 60 seconds exceeded

Wowww, es que tienes una consulta aldo densa

Usas indexación? tablas innodb? Acuérdate que los order by genera buen consumo de recurso por parte del servidor de base de datos.

Te doy opciones:

1. Intentar optimizar aún más esa consulta, intenta jugando en la consola directamente y observando los tiempos de respuesta. Lee sobre analyze.

2. Si después de hacer el punto 1, ves que no puedes hacer más por parte de la Db, incrementa el max_execution_time del php.ini, lo podrás hacer modificando la instrucción en el .htaccess.

Código .htaccess:
Ver original
  1. php_value max_execution_time 60

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #3 (permalink)  
Antiguo 20/04/2010, 08:13
 
Fecha de Ingreso: marzo-2010
Mensajes: 12
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Fatal error: Maximum execution time of 60 seconds exceeded

puedes usar set_time_limit(0) en la primera linea de tu script si le pasas cero como parametro el tiempo de ejecucion sera infinito

Saludos
  #4 (permalink)  
Antiguo 20/04/2010, 08:15
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Fatal error: Maximum execution time of 60 seconds exceeded

en mi humilde opinion.. si una consulta a mysql se demora mas de 60 segundos es que esta mal hecha, puedes usar LIMIT si los datos son muchos o como dijo Carxl depurar mas tu consulta para q tarde menos :P
__________________
More about me...
~ @rhyudek1
~ Github
  #5 (permalink)  
Antiguo 20/04/2010, 08:53
 
Fecha de Ingreso: marzo-2008
Mensajes: 25
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Fatal error: Maximum execution time of 60 seconds exceeded

Gracias a todos ! En el transcurso del dia probare mas cosas y luego les dire que fue lo que me funciono !
Gracias como siempre :D:D
  #6 (permalink)  
Antiguo 20/04/2010, 15:29
 
Fecha de Ingreso: marzo-2008
Mensajes: 25
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Fatal error: Maximum execution time of 60 seconds exceeded

Bueno , parece ser que el problema esta en la consulta anidada que hago "select max(CodContacto) maximo from contacto group by CodCliente". Es ahi cuando peta el servidor.
Tengo que encontrar una forma mas eficaz de plantear todo esto ya que si o si necesito que el codigo de contacto de cada cliente sea el ultimo. Esto es de una base de datos de un callcenter. Es decir, un cliente puede tener varios contactos, pero, al momento de listar el ultimo resultado de cada cliente por fecha, necesito que para cada cliente, me de el ultimo resultado...
Le di vueltas pero no he encontrado la consulta adecuada....
  #7 (permalink)  
Antiguo 21/04/2010, 07:58
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 9 meses
Puntos: 70
Respuesta: Fatal error: Maximum execution time of 60 seconds exceeded

Entonces plantea la ayuda y/o la duda de la consulta en el foro de mysql.

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com

Etiquetas: exceeded, fatal, time
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 23:09.