Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/05/2010, 09:17
LordRadium
 
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..............