Ir para o conteúdo

Manipular Ficheiros

O primeiro comando que vou falar é o comando fopen comando que serve para abrir o ficheiro.

Abrir um ficheiro

Para abrir um ficheiro, usa-se o comando fopen. Este irá devolver um handler para o ficheiro, isto é, um objecto que represente um acesso ao ficheiro. A sua sintaxe é a seguinte:

fopen($nomeficheiro, $modoabertura)

O parâmetro $modoabretura indica o tipo de operação a executar sobre o ficheiro após a sua abertura podendo ser um dos seguintes:

Modo de abertura Explicação
r Abre o ficheiro para leitura e coloca o apontador no inicio
r+ Abre o ficheiro para leitura e escrita e coloca o apontador no inicio do ficheiro
w Abre o ficheiro para escrita e coloca o apontador no inicio do ficheiro ( cria o ficheiro se este não existir)
w+ Abre o ficheiro para leitura e para escrita e coloca o apontador no inicio do ficheiro (cria o ficheiro se este não existir)
a Abre o ficheiro escrita e coloca o apontador no fim do ficheiro (cria o ficheiro se este não existir)
a+ Abre o ficheiro para leitura e para escrita e coloca o apontador no fim do ficheiro (cria o ficheiro se este não existir)

Exemplo de abertura

// abrir o ficheiroa.txt exclusivamente para operações de leitura
$fa = fopen("ficheiroa.txt", "r");

// abrir o ficheirob.txt para escrita
$fb = fopen("ficheirob.txt", "w");

Uma vez aberto o ficheiro, é possível operar sobre ele, lendo ou escrevendo dados.

Ler conteúdos de um ficheiro de texto

Para ler ficheiros de texto, basta usar a função fread para ler todo o ficheiro. A sua sintaxe é a seguinte:

string fread($handle, $limite)

O $handle é o objecto que nos é devolvido pela função fopen (daí a necessidade de abrir o ficheiro com esta função). O $limite é o número de bytes que pretendemos ler do ficheiro de texto.

Exemplos de leitura de ficheiros

Assumindo que o ficheiroa.txt tem o seguinte conteúdo:

carochinha lindinha
e bonitinha
  • Ler os primeiros 3 bytes (caracteres) do ficheiro
    $fa = fopen("ficheiroa.txt", "r");
    
    // indicar o handler de abertura do ficheiro, e o limite pretendido
    echo fread($fa, 3);
    
    Resultado:
    car
    
  • Ler todo o conteúdo do ficheiro:
    $fa = fopen("ficheiroa.txt", "r");
    
    // indicar o handler de abertura do ficheiro, e o limite pretendido
    echo fread($fa, filesize("ficheiroa.txt"));
    
    Resultado:
    carochinha lindinha
    e bonitinha
    

Escrever ficheiros de texto

Para escrever ficheiros de texto usa-se a função fwrite, cuja sintaxe é:

string fread($handle, $texto)

Tal como no fread, a variável $handle irá receber o objecto criado com a abertura do ficheiro, e $texto irá conter o texto a ser escrito no ficheiro.

Exemplos de escrita em ficheiros

Assumindo que o ficheirob.txt tem o seguinte conteúdo:

O sapo toscas foi passear ao rio
  • Acrescentar conteúdos ao ficheiro:
    // Ter em atenção que devemos abrir o ficheiro para escrita
    // mas colocando o apontador (onde começa a escrever) no fim do ficheiro
    // usa-se a opção "a" (append)
    $fb = fopen("ficheirob.txt", "a");
    
    $novo = " e o macaco foi jogar hockey";
    fwrite($fb, $novo);
    
    Obtemos:
    O sapo toscas foi passear ao rio e o macaco foi jogar hockey
    
  • Reescrever o conteúdo do ficheiro:
    // ter o cuidado de abrir o ficheiro para escrita com "w"
    $fb = fopen("ficheirob.txt", "w");
    
    $novo = "O macaco foi jogar hockey";
    fwrite($fb, $novo);
    
    Conteúdo do ficheiro:
    O macaco foi jogar hockey
    

Exemplo com leitura e escrita

Neste exemplo final, pretende-se fazer um contador muito simples de visitas ao website. Iremos usar um ficheiro de texto para guardar o número de visitas totais, por isso o que pretendemos é, ao chegar um visitante ao nosso website, abrir o ficheiro, ler o número de visitas já registadas, acrescentar-lhe a nova visita e actualizar o valor.

<?php
    // verificar se conseguimos aceder ao nosso contador
    if (!$file = fopen("contador.txt", "r")) {
        echo "O contador não conseguiu abrir o ficheiro";
    }else{ 
      // obter as visitas
      $visitas = (int) fread($file, filesize("contador.txt") + 1);
      $visitas++;
      fclose($file);

      // actualizar o numero de visitas no ficheiro
      $file = fopen("contador.txt", "w");
      fwrite($file, $visitas);
      fclose ($file);

      echo "Já recebemos $visitas visitas!";
    }
?>