Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal,
estou fazendo uma aplicação em php para ler alguns logs,mais estou tendo muito problema com a função explode,como o log não tem somente um separador,por exemplo a vírgula,estou confuso,vou mostrar como é o log
21:43:22 - ID:( metalx ) / Name:( Destroyer ) / IP ( 189.24.133.163 ) - Aging Up ( Dreadnaught Shield ) [17] ( 13018847 3771115 <418944814> ) -> ( 14062678 11611585 <771622930> )
Preciso dar um explode nas seguintes informações,para organizar elas em uma tabela
21:43:22
metalx
Destroyer
189.24.133.163
Aging Up
Dreadnaught Shield
17
13018847
3771115
418944814
14062678
11611585
771622930
tentei de várias formas ler esse log,mais só conseguir fazer ler a hora,vejam o que eu fiz
<?php
$arquivo_extrato = "historic/log.his";
$ponteiro = fopen($arquivo_extrato, "r");
$conteudo = fread($ponteiro, filesize($arquivo_extrato) );
$linha1 = explode(" -", $conteudo);
$linha2 = explode(" ID:( ", $conteudo);
$log1 = trim("$linha1[0]");
//$log2 = trim("$linha2[0]");
?>
<tr>
<td align="center" bgcolor="#FFFFFF"><? echo $log1; ?></td>
<td align="center" bgcolor="#FFFFFF"><? echo $log2; ?> </td>
<td align="center" bgcolor="#FFFFFF"><? echo $log3; ?></td>
<td align="center" bgcolor="#FFFFFF"><? echo $log4; ?> </td>
<td align="center" bgcolor="#FFFFFF"><? echo $log5; ?> </td>
</tr><br />
será que alguém pode me ajudar?
Nossa,pesquisei sobre Expressões regulares,não entendi nada do que encontrei.
será que você pode começar o código de uma parte do log para eu entender como funciona?
>
estou fazendo uma aplicação em php para ler alguns logs,mais estou tendo muito problema com a função explode,como o log não tem somente um separador,por exemplo a vírgula,estou confuso,vou mostrar como é o log
21:43:22 - ID:( metalx ) / Name:( Destroyer ) / IP ( 189.24.133.163 ) - Aging Up ( Dreadnaught Shield ) [17] ( 13018847 3771115 <418944814> ) -> ( 14062678 11611585 <771622930> )
Kara, que log é esse ???
Bom, como o ~TiuTalk~ disse, você deve utilizar expressão regular, eu consegui ver 3 padrões nessa sua string, porém como é só uma string pode ser que a expressão abaixo não funcione para todo o log e você tenha que adaptá-la:
[font="Courier New"]$str = "21:43:22 - ID:( metalx ) / Name:( Destroyer ) / IP ( 189.24.133.163 ) - Aging Up ( Dreadnaught Shield ) [17] ( 13018847 3771115 <418944814> ) -> ( 14062678 11611585 <771622930> )";
$mtc = array();
$p0 = "(?:(\d{2}):(\d{2}):(\d{2}))";
$p1 = "(?:(\w+(?:(?:\s*\w*)*)*)(?::)?\s*\(\s*([^\)]*)\))";
$p2 = "\(\s*(\d+)\s*(\d+)\s*\<(\d+)\>\s*\)";
$s0 = "(?:\s*\-\s*)";
$s1 = "(?:\s*\/\s*)";
preg_match( sprintf( "/%s%s%s%s%s%s%s%s%s\s*\[(\d{2})\]\s*%s\s*\-\>\s*%s/" , $p0 , $s0 , $p1 , $s1 , $p1 , $s1 , $p1 , $s0 , $p1 , $p2 , $p2 ) , $str , $mtc );
var_dump( $mtc );[/font]
Isso vai imprimir:
array(19) {
[0]=>
string(178) "21:43:22 - ID:( metalx ) / Name:( Destroyer ) / IP ( 189.24.133.163 ) - Aging Up ( Dreadnaught Shield ) [17] ( 13018847 3771115 <418944814> ) -> ( 14062678 11611585 <771622930> )"
[1]=>
string(2) "21" // A hora
[2]=>
string(2) "43" // O minuto
[3]=>
string(2) "22" //O segundo
[4]=>
string(2) "ID"
[5]=>
string(7) "metalx "
[6]=>
string(4) "Name"
[7]=>
string(10) "Destroyer "
[8]=>
string(3) "IP "
[9]=>
string(15) "189.24.133.163 "
[10]=>
string(9) "Aging Up "
[11]=>
string(19) "Dreadnaught Shield "
[12]=>
string(2) "17"
[13]=>
string(8) "13018847"
[14]=>
string(7) "3771115"
[15]=>
string(9) "418944814"
[16]=>
string(8) "14062678"
[17]=>
string(8) "11611585"
[18]=>
string(9) "771622930"
}
Bom, depois de tentar editar esse post 2 vezes eu
>
Nossa,pesquisei sobre Expressões regulares,não entendi nada do que encontrei.
será que você pode começar o código de uma parte do log para eu entender como funciona?
Kara, desconsidera o post acima, o fórum insistiu em estragar a expressão regular. No link abaixo está o código:
Muito obrigado,vou analizar o código e tentar continuar :D
Procure sobre Expressões Regulares... Explode não serivira nesse caso. ;)