Foros del Web » Programando para Internet » PHP »

mi script solo hace la consulta una vez

Estas en el tema de mi script solo hace la consulta una vez en el foro de PHP en Foros del Web. hola a todos, vengo con el siguiente problema como si el mundo no tuvier mauchos jajajajaj ok vamos al grano tengo un script en php ...
  #1 (permalink)  
Antiguo 06/05/2010, 09:17
 
Fecha de Ingreso: marzo-2010
Mensajes: 140
Antigüedad: 14 años, 1 mes
Puntos: 0
mi script solo hace la consulta una vez

hola a todos, vengo con el siguiente problema como si el mundo no tuvier mauchos jajajajaj ok vamos al grano

tengo un script en php que hace una consulta a una tabla donde llegan mensajes de un servidor, estos mensajes tienen un tiempo para salir y el script busca aquellos que cumplen esa condicion y los envia a una bandeja de salida. El script funciona bien si lo ejecuto via cron job pero a la larga me provoca problemas en el sistema operativo y satura el limite de procesos por lo cual shell manda un mensaje fork y no puedo trabajar.

Cuando ejecuto el script directamente por medio del comando php miscript.php hace la consulta solo una vez, o sea lo que encontro para enviar a la bandeja de salida despues de que se ejecuto en ese momento lo envia pero despues ya no hace toma mas valores que hayan llegado despues, he estado buscando la solucion pero ya estoy confundido, por eso solo tengo dos opciones hacer que funcione directo para poder llamar el script con un nohup o mejorarlo para que funcione bien con cron y no me sature la memoria ni el limite de procesos

a continuacion mi script y por favor diganme que opinan y tips para mejorarlo.


<?php





function verificar_pendiente($mail,$texto_encabezado,$texto _pie,$now,$maximo, $estado, $fechanotif, $iduser){

require_once('./includes/config.inc.php');



echo "Inicio tareas propias.";
if (!maximo_tareas_siguientes($maximo)){
$consulta = "SELECT * FROM tarea, usuario WHERE (ADDTIME('$now', '0 00:30:00') >
tarea.fecha_notif) AND (usuario.iduser = tarea.iduser) AND (tarea.notificar='eventual') AND
(tarea.estado='pendiente')";
}
else{
$consulta = "SELECT * FROM tarea, usuario WHERE (ADDTIME('$now', '0 01:00:00') >
tarea.fecha_notif) AND (usuario.iduser = tarea.iduser) AND (tarea.notificar='eventual') AND
(tarea.estado='pendiente')";

}
$query = mysql_query($consulta);

while($row = mysql_fetch_array($query)){
$msj = $texto_encabezado.$row["tarea"]."\n".$texto_pie;
$sql = "INSERT INTO mensaje_por_enviar(mail,msj,marc,hora) VALUES ('{$row['mail']}','$msj','$mail','$now')";
mysql_query($sql);
if (! mysql_error() )
echo "Tarea enviada a {$row['telefono']}<br>";
else
echo "Error al intentar agregar el mensaje en la cola.<br>".mysql_error()."<br>";
$sql = "UPDATE tarea SET estado='realizado' WHERE idtarea=".$row['idtarea'];
mysql_query($sql);
if (! mysql_error() )
echo "Tarea {$row['idtarea']} configurada como realizada.\n";
else
echo "Error al intentar configurar como agregada la tarea {$row['idtarea']}.<br>".mysql_error()."<br>";

$mensajeaenviar=$consulta;

$estado = $mensajeaenviar['estado'];
$fechanotif = $mensajeaenviar['fecha_notif'];
$iduser = $mensajeaenviar['iduser'];





}




}
function maximo_tareas_siguientes($maximo){
$consulta_actual = "SELECT * FROM tarea, usuario WHERE (ADDTIME('$now', '0 00:30:00') >
tarea.fecha_notif) AND (usuario.iduser = tarea.iduser) AND (tarea.notificar='eventual') AND
(tarea.estado='pendiente')";

$res=mysql_query($consulta_actual);
$cantidad_actual = mysql_num_rows($res);
$consulta_siguiente = "SELECT * FROM tarea, usuario WHERE (ADDTIME('$now', '0 01:00:00') >
tarea.fecha_notif) AND (usuario.iduser = tarea.iduser) AND (tarea.notificar='eventual') AND
(tarea.estado='pendiente')";
$res=mysql_query($consulta_siguiente);
$cantidad_hora = mysql_num_rows($res);
$cantidad_siguiente=$cantidad_hora-$cantidad_actual;


echo "La cantidad actual es:$cantidad_actual \n";

echo "La cantidad siguiente es:$cantidad_siguiente \n ";
if ($cantidad_siguiente<=$maximo)

return 1;


}





function maximo_tareas_siguientes_terceros($maximo){
$consulta_actual = "SELECT * FROM tarea_tercero, usuario WHERE
(ADDTIME('$now', '0 00:30:00') > tarea_tercero.fecha_notif) AND (usuario.iduser = tarea_tercero.iduser_emisor) AND (tarea_tercero.notificar='eventual') AND (tarea_tercero.estado='pendiente')";
$res=mysql_query($consulta_actual);
$cantidad_actual = mysql_num_rows($res);
$consulta_siguiente = "SELECT * FROM tarea_tercero,usuario WHERE (ADDTIME('$now', '0 01:00:00') > tarea_tercero.fecha_notif) AND (usuario.iduser = tarea_tercero.iduser_emisor) AND (tarea_tercero.notificar='eventual') AND (tarea_tercero.estado='pendiente')";
$res=mysql_query($consulta_siguiente);
$cantidad_hora = mysql_num_rows($res);
$cantidad_siguiente=$cantidad_hora-$cantidad_actual;
echo "La cantidad actual es:$cantidad_actual \n";
echo "La cantidad siguiente es:$cantidad_siguiente \n";
if ($cantidad_siguiente<=$maximo)

return 1;

}

function verificar_pendiente_terceros($mail,$texto_encabeza do,$texto_pie,$now,$maximo){
echo "Inicio tareas a terceros.";

if (!maximo_tareas_siguientes_terceros($maximo))
$consulta = "SELECT * FROM tarea_tercero, usuario WHERE (ADDTIME('$now', '0 00:30:00') > tarea_tercero.fecha_notif) AND (usuario.iduser = tarea_tercero.iduser_emisor) AND (tarea_tercero.notificar='eventual') AND (tarea_tercero.estado='pendiente')";
else {
$consulta= "SELECT * FROM tarea_tercero, usuario WHERE (ADDTIME('$now', '0 01:00:00') > tarea_tercero.fecha_notif) AND (usuario.iduser = tarea_tercero.iduser_emisor) AND (tarea_tercero.notificar='eventual') AND (tarea_tercero.estado='pendiente')";
}

// $consulta = "SELECT tarea_tercero.*, usuario2.telefono AS telefono_emisor FROM tarea_tercero, usuario, usuario AS usuario2 WHERE ADDTIME('$now', '0 00:30:00') >= tarea_tercero.fecha_notif AND usuario.iduser = tarea_tercero.iduser_destinatario AND usuario2.iduser = tarea_tercero.iduser_emisor AND notificar='eventual' AND tarea_tercero.estado='pendiente'";
$tarea_tercero = mysql_query($consulta);
while($row = mysql_fetch_array($tarea_tercero)){
$msj = $texto_encabezado.$row["tarea"]."\n".$texto_pie;
// $sql = "INSERT INTO sms_por_enviar(cel,msj,marc,hora) VALUES ('{$row['telefono']}','$msj','$cel_empresa',now())";
// mysql_query($sql);
//print_r($sql);
$sql = "insert into mensaje_por_enviar(mail,msj,marc,hora) values('{$row['iduser_destinatario']}','{$row['mail']} : {$row['tarea']}','$mail','$now')";
$query = mysql_query($sql);
print_r($sql);
$sql = "insert into mensaje_por_enviar(mail,msj,marc,hora) values('{$row['mail']}','Mensaje a {$row['iduser_destinatario']} enviado','$mail','$now')";
$query = mysql_query($sql);
print_r($sql);
if (! mysql_error() )
echo "Tarea de enviada a {$row['mail']} de {$row['iduser_destinatario']}<br>";
else
echo "Error al intentar agregar el mensaje en la cola.<br>".mysql_error()."<br>";
$sql = "UPDATE tarea_tercero SET estado='realizado' WHERE idtarea=".$row['idtarea'];
mysql_query($sql);
if (! mysql_error() )
echo "Tarea a tercero {$row['idtarea']} configurada como realizada.\n";
else
echo "Error al intentar configurar como agregada la tarea a tercero {$row['idtarea']}.<br>".mysql_error()."<br>";
}
}

$veces = date("s");
$time_to_processor = 59;
while (1)
{

$minuto_actual = date("s");
if ($minuto_actual<$veces)
$veces=$minuto_actual;
if (($minuto_actual - $veces)== $time_to_processor) {

$dif= $hora_local - date('0')/100;
$new_time = strtotime($dif." hours");
$now = date("Y-m-d H:i:s", $new_time);
//$now = date("Y-m-d H:i:s");


verificar_pendiente($mail,$texto_encabezado,$texto _pie,$now,$maximo, $estado, $fechanotif, $iduser);
verificar_pendiente_terceros($mail,$texto_encabeza do,$texto_pie,$now,$maximo);
$veces=$minuto_actual;


//$mensajeaenviar=$consulta;




print "Tarea a enviar..\n estado: $estado \n: fecha:$fechanotif \n usuario:$iduser \n $now \n";





//print "$now";

}





}

?>

saludos..............
  #2 (permalink)  
Antiguo 06/05/2010, 11:11
 
Fecha de Ingreso: marzo-2010
Mensajes: 140
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: mi script solo hace la consulta una vez

bueno viendo la ejecucion de mi script en el shell en la linea 27, 91, 94, 115 me manda el mensaje de error de las instrucciones mysql_fetch_array, mysql_num_rows

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/public_html/miscript.php on line 94
La cantidad actual es:
La cantidad siguiente es:0

Warning: mysql_fetch_array():

creo por eso no me hace la consulta despues de encontrar mensajes, sigue ejecutandose pero ya no toma valores.

Última edición por LordRadium; 06/05/2010 a las 11:21
  #3 (permalink)  
Antiguo 06/05/2010, 15:46
 
Fecha de Ingreso: marzo-2010
Mensajes: 140
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: mi script solo hace la consulta una vez

Es raro porque el script al usar el while deberia hacer la consulta sin ningun problema cada minuto.

please ayudenme ya avance un buen solo me falta esto y ya.

Etiquetas: Ninguno
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 08:44.