Foros del Web » Programando para Internet » PHP »

Escoger de un texto solo lo que me interesa:

Estas en el tema de Escoger de un texto solo lo que me interesa: en el foro de PHP en Foros del Web. Hola tengo un log el cual leo con php, la estructura del log es la siguiente: OUT,OK,queue,localhost.localdomain 127.0.0.1,600000001,default,Sun Feb 26 20:13:18 2006 OUT,OK,gnokii,localhost.localdomain 127.0.0.1,600000001,default,Sun Feb ...
  #1 (permalink)  
Antiguo 10/03/2006, 05:35
 
Fecha de Ingreso: febrero-2003
Mensajes: 763
Antigüedad: 21 años, 2 meses
Puntos: 2
Escoger de un texto solo lo que me interesa:

Hola tengo un log el cual leo con php, la estructura del log es la siguiente:

OUT,OK,queue,localhost.localdomain 127.0.0.1,600000001,default,Sun Feb 26 20:13:18 2006
OUT,OK,gnokii,localhost.localdomain 127.0.0.1,600000001,default,Sun Feb 26 20:13:33 2006
OUT,OK,queue,localhost.localdomain 127.0.0.1,600000002,default,Sun Feb 26 22:30:26 2006
OUT,OK,gnokii,localhost.localdomain 127.0.0.1,600000002,default,Sun Feb 26 22:30:38 2006
IN,OK,gnokii,5126,local,+34607003110,Sun Feb 26 22:34:23 2006
OUT,OK,queue,localhost.localdomain 127.0.0.1,600000003,default,Sun Feb 26 23:01:58 2006
OUT,OK,gnokii,localhost.localdomain 127.0.0.1,600000003,default,Sun Feb 26 23:02:17 2006
IN,OK,gnokii,+34677275587,local,+34609090875,Sun Feb 26 23:07:51 2006
OUT,OK,queue,localhost.localdomain 127.0.0.1,600000004,default,Mon Feb 27 02:32:13 2006
OUT,OK,gnokii,localhost.localdomain 127.0.0.1,600000004,default,Mon Feb 27 02:32:29 2006
OUT,OK,queue,localhost.localdomain 127.0.0.1,600000005,default,Wed Mar 1 20:01:20 2006
OUT,ERROR,gnokii,localhost.localdomain 127.0.0.1,600000005,default,Wed Mar 1 20:01:27 2006
OUT,ERROR,gnokii,localhost.localdomain 127.0.0.1,600000005,default,Wed Mar 1 20:06:36 2006

los OUT,OK son mensajes que han sido enviado correctamente, mas concretamente los OUT,OK,queue es que se ha enviado correctamente a la pasarela y los OUT,OK,gnokii es que se ha enviado correctamente a la red, los OUT,ERROR,gnokii es que no se han enviado bien a la red, cuando no se envia bien a la red reintenta dos veces como veis al final del trozo de log que he puesto, ya por otra parte los IN,OK,gnokii signfica que el mensaje ha sido recibido al servidor correctamente pero esto ultimo no me interesa.

os cuento que quiero hacer, el log lo leo mediante los siguiente comandos php:

Código PHP:
$html implode(''file('gsmlog/gsgd-accounting.log'));
$pizza  nl2br("$html");
echo 
$pizza
Como podriis deducir este log sirve para saber si los mensajes han sido enviados correctamente, me gustaria que el usuario pudiese ver el estado de su mensaje pero solo del que ha enviado el,

supongamos que el mensaje que envio corresponde con el numero: 600000002 nuestro sistema buscaria en el log y encontraria estas dos lineas del log:

OUT,OK,queue,localhost.localdomain 127.0.0.1,600000002,default,Sun Feb 26 22:30:26 2006
OUT,OK,gnokii,localhost.localdomain 127.0.0.1,600000002,default,Sun Feb 26

pero el no visualizaria esas dos lineas del log si no algo asi: "procesando..." --> "enviado con exito"

procesando... equivale a: OUT,OK,queue,localhost.localdomain 127.0.0.1,600000002,default,Sun Feb 26 22:30:26 2006
y
enviado con existo equivale a: OUT,OK,gnokii,localhost.localdomain 127.0.0.1,600000002,default,Sun Feb 26

otro ejemplo de error seria por ejemplo que no se ha enviado correctamente, como seria el caso de: 600000005

mostraria algo asi: "procesando..." --> "error, reintentado" "error, reintentando"

Tambien esta el caso de que el usuario envia dos mensajes al mismo numero en ese caso hay varias lineas para leer pues solo leeria las lineas mas actualizadas, es decir que lea las ultimas lineas y las anteriores de anteriores mensajes las omita.

¿es posible todo? en ese caso como podria empezar?

saludos
  #2 (permalink)  
Antiguo 10/03/2006, 06:28
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 18 años, 11 meses
Puntos: 2
Para empezar no te recomendaria utilizar nl2br, al menos hasta terminar de tratar la cadena que te ha devuelto del arhivo, creo que es mucho mejor trabajar con "\n" que con "<br />".

Lo que yo haria es utilizar explode, y tener en un array todas las lineas del log (separadas por "\n"), tal que:

Código PHP:

$html 
implode(''file('gsmlog/gsgd-accounting.log'));
$lineas=explode ("\n",$html); 
Y despues recorreria el array, y volveria a utilizar el explode para conseguir cada dato por separado (separados por ","), una cosa como esta:

Código PHP:

for($i=0;$i<sizeof($lineas);$i++){
     
$datos=explode(",",$lineas[$i]);
     
     if(
$datos[0]=="OUT"){
           echo 
"Salida";
     }

Luego ya, dentro del bucle, se harian las comparaciones y ese tipo de cosas, como en el ejemplillo.
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #3 (permalink)  
Antiguo 10/03/2006, 11:39
 
Fecha de Ingreso: febrero-2003
Mensajes: 763
Antigüedad: 21 años, 2 meses
Puntos: 2
me ha parecido un buen comienzo pero tal como dices:

implode('', file('gsmlog/gsgd-accounting.log'));
$lineas=explode ("\n",$html);

for($i=0;$i<sizeof($lineas);$i++){
$datos=explode(",",$lineas[$i]);

if($datos[0]=="OUT"){
echo "Salida";
}
}

no sale error pero sale todo en blanco y hago un echo a $lineas me sale "array" ¿que extraño no?

saludos
  #4 (permalink)  
Antiguo 10/03/2006, 18:18
 
Fecha de Ingreso: febrero-2003
Mensajes: 763
Antigüedad: 21 años, 2 meses
Puntos: 2
por ejemplo imprimir solo las lineas que contengan ese numero seria muy complicado? porque buscar en una bd de datos mysql se mas o menos como funciona pero en un .log no tengo ni idea

gracias, saludos
  #5 (permalink)  
Antiguo 10/03/2006, 19:02
 
Fecha de Ingreso: diciembre-2005
Mensajes: 165
Antigüedad: 18 años, 3 meses
Puntos: 4
Intenta hacer un echo $lineas[0]; o un echo $lineas[1];
o un echo $datos[0]; o un echo $dato[1]; a ver si sale algun resultado.
  #6 (permalink)  
Antiguo 11/03/2006, 11:15
 
Fecha de Ingreso: febrero-2003
Mensajes: 763
Antigüedad: 21 años, 2 meses
Puntos: 2
pues acabo de sustituir el echo "Salida"; por los cuatro que me has dicho y ninguno funciona todo sale en blanco

saludos
  #7 (permalink)  
Antiguo 11/03/2006, 12:00
 
Fecha de Ingreso: diciembre-2005
Mensajes: 165
Antigüedad: 18 años, 3 meses
Puntos: 4
PEro no dentro, del if, sino fuera, que los muestre independientemente del que $datos sea == a OUT o no, es para ver si tienen algun valor o no, porque igual no estan adoptando ningun valor, porque el planteamiento inicial esta mal.
  #8 (permalink)  
Antiguo 12/03/2006, 06:21
 
Fecha de Ingreso: febrero-2003
Mensajes: 763
Antigüedad: 21 años, 2 meses
Puntos: 2
es raro fuera del if tambien sale todo en blanco, solo interesa imprimir las lineas que contengan el numero que busco, manejar archivos parece dificilillo

saludos
  #9 (permalink)  
Antiguo 12/03/2006, 07:57
 
Fecha de Ingreso: diciembre-2005
Mensajes: 165
Antigüedad: 18 años, 3 meses
Puntos: 4
Pero, si tienes:
implode('', file('gsmlog/gsgd-accounting.log'));
Deberia ser:
$html = implode('', file('gsmlog/gsgd-accounting.log')); ;
  #10 (permalink)  
Antiguo 12/03/2006, 08:14
 
Fecha de Ingreso: febrero-2003
Mensajes: 763
Antigüedad: 21 años, 2 meses
Puntos: 2
es verdad, que fallo mas tonto, ahora si me sale algo sale: OUTOUTOUTOUTINOUTOUTOUTIN... vamos sale todo unto el comienzo de cada linea, ¿porque sera?

saludos
  #11 (permalink)  
Antiguo 12/03/2006, 16:38
 
Fecha de Ingreso: diciembre-2005
Mensajes: 165
Antigüedad: 18 años, 3 meses
Puntos: 4
La forma en que te lo muestre ya depende de ti
si quieres, que te muestre en varias lineas:
echo $datos[0]."<br>";

Luego, cada numero corresponde a un valor, o sea,
[0] muetra OUT o IN
[1] mostraria OK o ERROR
[2] queue o gnokii
[...] etc....

Y si, por ejemplo, usas este if:

if($datos[0]=="OUT"){
echo "Salida<br>";
}

Pos cada vez que encuentre un OUT te mostrara en la pantalla SALIDA

Hasta luego
  #12 (permalink)  
Antiguo 13/03/2006, 02:14
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 18 años, 11 meses
Puntos: 2
Bueno escan_0, por las preguntas que haces puedo suponer que tienes poca o ninguna experiencia programando... te recomendaria que antes que nada que nada te leeyeras un buen manual de php, o incluso que encargaras el trabajo a un programador, antes de que te embrolles mas en este lio.

Lo digo porque si te ha costado hacer que te funcione ese pequeño script que posteé (aunque seguro que tenia algun que otro error, porque no lo probé... :p ), que me parece que es lo mas facil de todo, pues creo que te va a costar bastante programar el resto...

Es solo un consejo, saludos!
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
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 11:11.