Foros del Web » Programando para Internet » PHP »

Maximum execution time of 30 seconds exceeded O_o

Estas en el tema de Maximum execution time of 30 seconds exceeded O_o en el foro de PHP en Foros del Web. Estoy haciendo una funcion, que tome un numero X dado por prametro, busque en la tabla registros aleatoreos y los devuelva como un link html, ...
  #1 (permalink)  
Antiguo 07/03/2010, 19:36
Avatar de Carlmycol  
Fecha de Ingreso: diciembre-2007
Ubicación: Los Teques, Venezuela
Mensajes: 240
Antigüedad: 16 años, 11 meses
Puntos: 3
Maximum execution time of 30 seconds exceeded O_o

Estoy haciendo una funcion, que tome un numero X dado por prametro, busque en la tabla registros aleatoreos y los devuelva como un link html, pero no entiendo porque exede el tiempo de ejecucion.. creo que es porque tarda un tiempo alto en generar el numero aleatoreo, o que puede ser?

Código PHP:
function title_randPost($num)
{    
    
$total=get_TotalPost();
    
$link=new mySQL;
    
$link->conectar();
    
    for (
$i=0;$i<$num;)
    {
        
$rand[$i]=rand(1$total);
        
$rands=$rand[$i];
        
$z=0;
        for (
$n=0$n<count($rand); $n++)
        {
            if (
$rand[$n]==$rands)
            {
                
$z=1;
            }
        }
        
        if (
$z==0)
        {
            
$consulta="SELECT * FROM articulos WHERE id=$rands";
            
$result=$link->consultar($consulta);
    
            if (
$link->num_rows($result)>0)
            {
                while(
$row $link->fetch_array($result))
                {
                    
$titulo=$row['titulo'];
                    
$link_title=$row['link'];
            
                }
    
            
$enlace.="<a href=\"index.php?articulo=$link_title\">$titulo</a>";
            
$i++;
            }
        }
    }
    
    
$link->close;
    return 
$enlace;

Saludos
  #2 (permalink)  
Antiguo 07/03/2010, 20:29
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: Maximum execution time of 30 seconds exceeded O_o

Haciendo unas modificaciones encontre algo curioso... al parecer tarda demaciado tiempo calculando numeros aleatoreos de tal forma que no halla ninguno que se repita O_o, creo que es por eso, o porque tengo el for asi for($i=0;$i<$num;) para que no sume ni reste,..

Código PHP:
function title_randPost($num)
{    
    
$total=get_TotalPost();
    
$link=new mySQL;
    
$link->conectar();
    

    for (
$i=0;$i<$num;$i++)
    {
        
$rand[$i]=rand(1$total);
        
$rands=$rand[$i];
        
$z=0;
        
/*for ($n=0; $n<count($rand); $n++)
        {
            if ($rand[$n]==$rands)
            {
                $z=1;
            }
        }*/
        
        
if ($z==0)
        {
            
$consulta="SELECT * FROM articulos WHERE id=".$rand[$i];
            
$result=$link->consultar($consulta);
    
            if (
$link->num_rows($result)>0)
            {
                while(
$row $link->fetch_array($result))
                {
                    
$titulo=$row['titulo'];
                    
$link_title=$row['link'];
            
                }
    
            echo 
"<a href=\"index.php?articulo=$link_title\">$titulo</a>";
            
/*$i++;*/
            
}
        }
    }
    
    
$link->close;
    return 
$enlace;

Que extraño alguien puede ayudar con esto,. esta bien raro

Saludos
  #3 (permalink)  
Antiguo 07/03/2010, 20:35
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 15 años, 3 meses
Puntos: 150
Respuesta: Maximum execution time of 30 seconds exceeded O_o

Lo mejor es que vayas poniendo trazas, por ejemplo tras esto:


for ($i=0;$i<$num;$i++)
{


añade

echo $i." - ".$num." <br>";
if ($i>5) {exit();}


Y asi vas viendo que valores van tomandose, y atajando el posible error donde se dé, la idea es localizar el error a ver si esta ahi, o mas abajo donde haces el SELECT..... en fin, espero te sirva esta metodologia, mas que solucion :)
  #4 (permalink)  
Antiguo 07/03/2010, 20:51
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: Maximum execution time of 30 seconds exceeded O_o

Muchas gracias por tu ayuda amigo, logre encontrar la solucion,.. imprimiendo los valores que toma aleatoreamente durante el for anidado, resulta que estaba comparando mal en el for anidado,..

($rand[$n]==$rands)

Comparaba TODOS los indices (hasta el ultimo que es el que debe ser diferente) lo solucioné tomando un comparador logico

($n<count($rand)-1 && $rand[$n]==$rands)

Para que solo comparara si el indice no es el ultimo hasta el momento,..

Entonces claro cuando ejecute el script salia una larga fila de numeros aleatoros pues gracias al segundo for el primero nunca terminaba, claro.. bueno son gajes del oficio

Muchas gracias Vun, se te agradece!!
  #5 (permalink)  
Antiguo 07/03/2010, 21:53
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 15 años, 3 meses
Puntos: 150
Respuesta: Maximum execution time of 30 seconds exceeded O_o

NAda hombre, me alegro que te sirviera esto que te dije, aveces posteo algo parecido para otra gente y no quieren aprender, solo quieren que les den la solucion! jej, saludos

Etiquetas: exceeded, 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 05:57.