Jump to content
Fórum Script Brasil
  • 0

Função para ler ultimas linhas de um arquivo


dinohills

Question

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 ?

Edited by dinohills
Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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é.

Edited by dinohills
Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...