Ir para conteúdo
Fórum Script Brasil
  • 0

Função para ler ultimas linhas de um arquivo


dinohills

Pergunta

Bom dia,

seguinte eu montei 2 funções em php para ler a quantidade de linhas do final de um arquivo txt.

Vou usar isso para ficar monitorando em tempo real o log do squid e ver o que o pessoal esta acessando.

Bom mas o que vem ao caso é. Eu fiz ela de 2 jeitos uma usando somente php e outra usando o exec com o comando tail do linux.

Gostaria de saber qual vocês acham melhor.

Ambas estão funcionando perfeitamente.

função 1

<?php
function ultimas_linhas($arquivo, $qtd_linhas) {
    $arq = file($arquivo);

    $tot_linha = count($arq) - 1;
    $ultimas_linhas = $tot_linha - $qtd_linhas;

    for ($i = $tot_linha; $i > $ultimas_linhas; $i--) {
        echo $arq[$i]."<br/>";            
    }
}
ultimas_linhas('access.log', 50);
?>
função 2
<?php
function ultimas_linhas2($arquivo,$qtd_linhas){
    exec("tail -n $qtd_linhas $arquivo",$saida);
    
    for($i=count($saida);$i >= 0;$i--){
        echo $saida[$i]."<br/>";
    }    
}

ultimas_linhas2('access.log', 50);
?>

Qual dessas vocês usariam ?

Editado por dinohills
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Bem eu usaria a Primeira tendo em vista que é tudo em PHP, então seria o que eu conseguiria fazer.. no seu caso eu te indico a segunda função pois esta com varias linha a menos de código o que ajuda no processamento da função apesar que a diferença é minuscula ... porem é bem visivel que com a função toda em PHP ele tem um trabalho a mais que é ler todo o arquivo conta todas a linhas para chegar ao final o que deve dar algum atraso de resposta o que na função 2 é diferente já que ele trabalha diretamente com o comando do linux, o que seria decerta forma proprio para esse tipo de caso...

como não entendo muito ou melhor nada de linux em questões de comandos e etc, eu ficaria com a primeira função por entender 100% do código escrito.

Link para o comentário
Compartilhar em outros sites

  • 0

então... eu ficaria com a segunda pelo fato do próprio Linux fazer o gerenciamento...

eu trabalhei uns tempos atrás em uma empresa que desenvolvia sistemas de CallCenter... então como o fluxo de ligação era grande, tinha várias telas de monitoramento e muitas usavam tail e outros comandos pra fazer a leitura de logs e tal...

porque usando o código PHP, você carrega o arquivo "todo" como um array (na memória) pra fazer a leitura dos 50 últimos registros... o tail -n abre o arquivo a partir da linha especificada e como é externo faz o trabalho de limpar da memória... coisa que o PHP só vai fazer quando você sair da página...

minha opinião rs

abrs

Link para o comentário
Compartilhar em outros sites

  • 0

Tarde,

então estive pensando aqui e acho que vou acaba usando a segunda mesmo.

Porque alem do fato de ler somente as ultimas linhas do arquivo sem precisar ler o arquivo todo eu vou usar também egrep e awk para filtrar os ip's caso eu queira monitorar um ip a parte e também com awk eu já pego os campos que me interessa no log.

Mas no fim das contas eu vo incrementa as duas. Nunca se sabe quando uma pode ser mais util que a outra né.

Editado por dinohills
Link para o comentário
Compartilhar em outros sites

  • 0

Pois é Churc, sabendo que a 2 é melhor em desempenho e processamento que a 1 também fico com ela.. .mas como eu disse sabemos que as 2 funciona e paa que serve, mas por questão de conhecimento do que se esta fazendo com certeza ainda seria a Função 1 ... hoje eu sei que se eu der um tail vou abrir o arquivo do log nas ultimas linhas mas se eu tivess que fazer isso ontem com certeza cabaria saindo a primeira função asuhshauhsua.

mesmo assim achei muito interessante já tinha visto outras coisas do Linux e PHP trabalhando Junto e isso é algo muito bacana .. essa união com certeza gerar um bom ambiente de trabalho final para um cliente.. já que facilita bastante é inumeras questões =]...

mt bom dino.

Link para o comentário
Compartilhar em outros sites

  • 0

Confesso que quando li o título do seu tópico pensei na hora sobre o comando tail :)

Eu ficaria com a implementação em PHP, por funcionar em qualquer SO que roda o PHP. Mas já que você quer monitorar logs do squid, talvez seja melhor usar a segunda implementação. Sem contar que, como os amigos acima disseram, ela é mais performática.

Um abraço.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...