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

Como Manipular Um Arquivo Txt....


rbzorzato

Pergunta

Iai galera... minha duvida é o seguinte....

Estou fazendo uma pagina para controlar o arquivo squid.sites do linux.... preciso saber como faço para colocar o caracter # no inicio de uma linha.... ou apagar uma determinada linha... o formato do arquivo é o seguinte.... (para quem não sabe...)

//------------------------

site1.com.br

site2.com.br

site3.com.br

site4.com.br

site5.com.br

//------------------------

entaum se eu quiser tirar um site deste arquivo, é só colocar uma # no ininicio de uma determinada linha... ou apagar a linha.... alguém poderia me ajudar a fazer isto.... já fiz o seguinte arquivo mais não funcionou legal... em vez de acrescentar o caracter '#' ele cadastra outra linha no final....

//-----------------

antes de executar esta pagina... eu listo todos as linhas do arquivo squid.conf numa pagina e uso um contador para poder saber qual a linha que esta o site q quero apagar...

e passo esse numero atraves da variavel $nlinha;

ai no deletarsites.php eu faço uma nova contagem apartir de zero e consigo identificar qual a linha esta o site....beleza.. mas na hora de salvar da pau.... vejam ai....

//---------deletar sites-----------------------

$arq="squid.sites"; //arquivo a ser aberto

exec("sudo -u root chmod 777 $arq");// permissao de leitura e escrita no arquivo

$arquivo=fopen($arq,"a+"); // abrir o arquivos

$cont=0; // contador para saber qual linha esta o site

while (!feof ($arquivo)) // enquanto não fim de arquivo

{

$buffer = fgets($arquivo, 4096); // lendo linha a linha

if($cont==$nlinha) // se a linha é igual a $nlinha

{

$num = "#$site"; //variavel recebe nome do site com # na frente

$string = ereg_replace("$site", $num, $buffer);//substituo a linha q tem o nome do site por o nome do site com # na frente para q o linux interprete como comentado depois....

fputs($arquivo,$buffer); // aqui ta o problema.... na hora de gravar ele salva uma nova linha no fim do arqivo em fez de substituir no a linha q esta lendo neste momento....

}

$cont++;

}

exec("sudo -u root chmod 644 $arq");// tirandopermissao de leitura e escrita no arquivo

fclose ($arquivo); // fechar arquivo

--------------------

se alguém souber como faço para substituir a linha certa do arqiuvo ...... me ajudem por favor.....

talvez usando um fseek ... sei la...

desde já obrigado.....

ricardo bassan zorzato......

mandruvá .

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

olá amigo......eu não conheço muito bem as funções em PHP......mas com fseek realmente você resolve esse problema....se deseja verificar outra funções relacionadas, acesse:

file system

com fseek ficaria + ou - assim:

//---------deletar sites-----------------------

$arq="squid.sites"; //arquivo a ser aberto
exec("sudo -u root chmod 777 $arq");// permissao de leitura e escrita no arquivo
$arquivo=fopen($arq,"a+"); // abrir o arquivos
$cont=0; // contador para saber qual linha esta o site
while (!feof ($arquivo)) // enquanto não fim de arquivo
{
   $buffer = fgets($arquivo, 4096); // lendo linha a linha
   if($cont==$nlinha) // se a linha é igual a $nlinha
   {
      $num = "#$site"; //variavel recebe nome do site com # na frente
      $retorno = strlen($buffer);
      fseek($arquivo,- $retorno,SEEK_CUR); //o primeiro parametro é o ponteiro de arquivo, o segundo parametro é o offset (aqui você precisa dizer o tamanho em bytes que o cursor de posicionamento do arquivo será movimentado), e o terceiro parametro seta que o offset será efetuado apartir da posição corrente. Para mais detalhes veja o link abaixo do código. A  idéia é retonar da posição corrente o tamanho em bytes de $buffer lido, detalhe até '\n'  
  
      $string = ereg_replace("$site", $num, $buffer);//substituo a linha q tem o nome do site por o nome do site com # na frente para q o linux interprete como comentado depois....

      fputs($arquivo,$buffer); // aqui ta o problema.... na hora de gravar ele salva uma nova linha no fim do arqivo em fez de substituir no a linha q esta lendo neste momento....
   }
   $cont++;
}
exec("sudo -u root chmod 644 $arq");// tirandopermissao de leitura e escrita no arquivo

fclose ($arquivo); // fechar arquivo

fseek

não testei se funciona assim em PHP............em C já fiz vários scripts assim.....

o problema será se a função strlen retornará a quantidade de bytes de $buffer até '\n' ou não!!!!

qualquer dúvida poste ai.....

Link para o comentário
Compartilhar em outros sites

  • 0

seguinte rapaziada... funcionou + - .... mas o problema é que ele ta comendo de duas a tres letras da linha de baixo......

tipo:

se o arquivo original é:

globo.com

terra.com.br

omturbo.com

e se eu quero comentar o terra.com.br

o arquivo modificado fica:

globo.com

#terra.com.br

turbo.com

.... viram... ele sempre "come" as iniciais da linha de baixo ....

o codigo q eu fiz é o seguinte:::

<?

$arq="squid.sites";

exec("sudo -u root chmod 777 $arq");

$arquivo=fopen($arq,"r+");

$cont=0;

$tamanho=0;

$tam_total=0;

while (!feof ($arquivo))

{

$buffer = fgets($arquivo, 4096);

$tamanho = strlen($buffer);

$tam_total = $tam_total + $tamanho;

if($cont==$nlinha)

{

$tam_total = $tam_total - $tamanho;

$char = "#";

$char .=$site;

$char .="\n";

$buffer = ereg_replace("$site", $char, $buffer);

fseek($arquivo,$tam_total,SEEK_SET);

fwrite($arquivo,$buffer);

}

$cont++;

}

fclose ($arquivo);

exec("sudo -u root chmod 644 $arq");

include("index.php");

?>

entaum... acho q o problema estaria na hora de concatenar o "\n", não sei se é isso realmente... se alguém souber e puder me ajudar....

fico agradecido....

abraços : ricardo bassan zorzato -- MANDRUVÁ --

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
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...