Gracias por responder,
Lo primero no creo que sea, el script antes de esta modificación funcionaba perfectamente, nunca se colgaba y lo dejé funcionando horas, de todas formas.. ¿hay alguna forma de saber si es por esto?
la segunda opción.. ¿como puedo descartarla?
No me deja pegar todo el código... el mensaje resultante es demasiado largo... les pego todo el "código nuevo", está todo dentro de un if y el problema lo da exclusivamente al entrar en ese if, si no se cumple la condición el bucle se ejecuta sin problemas
Código PHP:
if($mov_pend["tipo"] == 2 && $mov_pend["horavuelta"] == NULL){
echo "ejecuto if1";
//consulto el nombre del planeta y su dueño
$query_datos_exploracion1 = mysql_query('SELECT nombre, dueno FROM mapa WHERE id=\''.$mov_pend["planetadestino"].'\'') or die(mysql_error());
$datos_exploracion1 = mysql_fetch_row($query_datos_exploracion1) or die(mysql_error());
//consulto las existencias de tropas del planeta
$query_datos_exploracion2 = mysql_query('SELECT * FROM existencias_tropas WHERE planetaactual=\''.$mov_pend["planetadestino"].'\'') or die(mysql_error());
$datos_exploracion2 = mysql_fetch_row($query_datos_exploracion2) or die(mysql_error());
//consulto las existencias de naves del planeta
echo 'SELECT * FROM existencias_naves WHERE planetaactual=\''.$mov_pend["planetadestino"].'\'';
$query_datos_exploracion3 = mysql_query('SELECT * FROM existencias_naves WHERE planetaactual=\''.$mov_pend["planetadestino"].'\'') or die(mysql_error());
echo $query_datos_exploracion3;
$datos_exploracion3 = mysql_fetch_array($query_datos_exploracion3) or die(mysql_error());
echo "ejecuto fetch3";
//consulto las existencias de defensas del planeta
$query_datos_exploracion4 = mysql_query('SELECT * FROM existencias_defensas WHERE planetaactual=\''.$mov_pend["planetadestino"].'\'') or die(mysql_error());
$datos_exploracion4 = mysql_fetch_row($query_datos_exploracion4) or die(mysql_error());
//consulto los movimientos pendientes para ver si ha llegado algún despliegue(de momento solo despliegue de tropas, falta despliegues de naves)
$query_datos_exploracion5 = mysql_query('SELECT * FROM mov_pend WHERE planetadestino=\''.$mov_pend["planetadestino"].'\' AND cancelado=\'0\' AND horallegada<=\''.time().'\' AND tipo=\'1\'') or die(mysql_error());
$datos_exploracion5 = mysql_fetch_row($query_datos_exploracion5) or die(mysql_error());
echo "antes de mensaje";
//proceso los datos
$mensaje= "Nombre del Planeta:".$datos_exploracion1[0]." Dueño:".$datos_exploracion1[1]."<br>";
echo "antes de los if";
//proceso las tropasls
if($datos_exploracion2[0] != NULL){
echo "ejecuto if2";
$mensaje = $mensaje."TROPAS:<br>";
$columnas = array_keys($datos_exploracion2);
// ATENCION: cambiar este for si se cambia el numero de entradas de la base de datos(esto hay que mejorarlo)
for($i = 3; $i <= 20 ;$i++){
if($datos_exploracion2[$i] != NULL){
$mensaje = $mensaje.$columnas[($i*2)+1]."=".$datos_exploracion2[$i]."<br>";
}
}
}
//proceso las naves
if($datos_exploracion3[0] != NULL){
$mensaje = $mensaje."NAVES:<br>";
$columnas = array_keys($datos_exploracion3);
// ATENCION: cambiar este for si se cambia el numero de entradas de la base de datos(esto hay que mejorarlo)
for($i = 3; $i <= 24 ;$i++){
if($datos_exploracion3[$i] != NULL){
$mensaje = $mensaje.$columnas[($i*2)+1]."=".$datos_exploracion3[$i]."<br>";
}
}
}
//proceso las defensas
if($datos_exploracion4[0] != NULL){
$mensaje = $mensaje."DEFENSAS:<br>";
$columnas = array_keys($datos_exploracion4);
// ATENCION: cambiar este for si se cambia el numero de entradas de la base de datos(esto hay que mejorarlo)
for($i = 3; $i <= 14 ;$i++){
if($datos_exploracion4[$i] != NULL){
$mensaje = $mensaje.$columnas[($i*2)+1]."=".$datos_exploracion4[$i]."<br>";
}
}
}
echo "preparo envio mensaje";
//envio el mensaje
mysql_query('INSERT INTO mensajes (de, para, hora, asunto, mensaje) VALUES (\'Sistema\',\''.$mov_pend["jugador"].'\', \''.time().'\', \'Exploración de:'.$datos_exploracion1[0].'\', \''.$mensaje.'\')') or die(mysql_error());
echo "envio mensaje";
//pongo a las tropas exploradoras de vuelta(60 segundos fijos porque todas las tropas tardan eso)
mysql_query('UPDATE mov_pend SET horavuelta=\''.(time() + 60).'\'') or die(mysql_error());
continue;
}
EDIT: he googleado un poco y usando este código:
Código PHP:
echo memory_get_usage()."/";
echo memory_get_peak_usage();
al principio del primer if y justo antes del error, obtengo estos resultados:
1317128/319368
321688/323800
Lo del tiempo de espera.. segun la web oficial de php, al ser por consola no hay límite (en web si que lo hay, de 30 segundos)