Olá,

Hoje falarei um pouco sobre como trabalhar com arquivos no PHP.

Para trabalhar com arquivos, precisamos primeiramente abrir um arquivo ou então criá-lo (caso ainda não exista). Para abrir um arquivo, utilizamos o comando fopen(), seguido da letra que representa a opção do modo de abertura (leitura, escrita, leitura e escrita, etc).

A seguir, uma tabela com as opções do modo de abertura de arquivo:


  • r - Abre somente para leitura; coloca o ponteiro do arquivo no começo do arquivo.
  • r+ - Abre para leitura e escrita; coloca o ponteiro do arquivo no começo do arquivo.
  • w - Abre somente para escrita; coloca o ponteiro do arquivo no começo e apaga o conteúdo do arquivo (caso tenha). Se o arquivo não existir, tenta criá-lo. 
  • w+ - Abre para leitura e escrita; coloca o ponteiro do arquivo no começo e apaga o conteúdo do arquivo (caso tenha). Se o arquivo não existir, tenta criá-lo.
  • a - Abre somente para escrita; coloca o ponteiro do arquivo no final do arquivo. Se o arquivo não existir, tenta criá-lo. 
  • a+ - Abre para leitura e escrita; coloca o ponteiro do arquivo no final do arquivo. Se o arquivo não existir, tenta criá-lo. 
  • x - Cria e abre o arquivo somente para escrita; coloca o ponteiro no começo do arquivo. Se o arquivo já existir, a chamada a fopen() falhará, retornando FALSE e gerando um erro de nível E_WARNING. Se o arquivo não existir, tenta criá-lo.
  • x+ - Cria e abre o arquivo para leitura e escrita; coloca o ponteiro no começo do arquivo. Se o arquivo já existir, a chamada a fopen() falhará, retornando FALSE e gerando um erro de nível E_WARNING. Se o arquivo não existir, tenta criá-lo.
Fonte: PHP.net - http://br2.php.net/manual/pt_BR/function.fopen.php

COMO ESCREVER EM ARQUIVO

A seguir, um exemplo comentado, de como escrever em arquivo.
<?php
//String a ser escrita no arquivo
$string =  "Escrevi no arquivo";

//Abre o arquivo no modo de escrita
//Cria o arquivo se não existir ou apaga o conteúdo do arquivo (caso tenha)
$handle = fopen("./arquivo.txt", "w");

//Tenta escrever uma string no arquivo
//Em caso de falha, imprime uma mensagem na tela
if(!fwrite($handle, $string))
{
    echo "Não foi possível escrever no arquivo!";
}

//Fecha o arquivo
fclose($handle);
?>
No exemplo acima, a variável $handler recebe o link de conexão para o arquivo aberto com o comando fopen(). O comando fwrite() é o responsável por fazer a escrita própriamente dita no arquivo, para isso, ele necessita de dois parâmetros: o link do arquivo aberto ($handler), e o texto a ser escrito.

COMO LER UM ARQUIVO

A seguir, um exemplo comentado, de como ler um arquivo.
<?php
//Abre o arquivo no modo de leitura
$handle = fopen("./arquivo.txt", "r");

//Inicializa a variável que armazenará o conteúdo
$read = '';

//Enquanto não for final de arquivo
while (!feof($handle)) {
    //Lê uma linha de um ponteiro no arquivo e armazena (concatenando) na variável $read
    $read .= fgets($handle);
    
    //Imprime na tela o que foi lido do arquivo
    echo $read."<br />";    
}

//Fecha o arquivo
fclose($handle);
?>
O código acima faz basicamente o mesmo que o código de escrita, porém, com algumas pequenas diferenças, como abrir o arquivo que será lido no modo de leitura (parâmetro 'r'), e fazendo um laço até o final do arquivo (feof()) para ir lendo linha à linha o conteúdo do arquivo.

O comando fgets aceita um parâmetro adicional opcional, que é o tamanho em bytes a ser lido no arquivo, de modo que poderíamos utilzar o comando desta forma, por exemplo:
$read .= fgets($handle, 4096);
Em alguns casos, pode ser interessante determinar o tamanho em bytes a ser lido do arquivo, portanto, é sempre bom saber que existe a opção.

Existem várias outras formas de escrever e ler arquivos, e pretendo ir atualizando esta seção gradativamente.

Quando ocorrer alguma atualização, notificarei na página principal do blog.

Até a próxima!
:-)







Sobre o Autor:
Guilherme Oliveira
Guilherme Oliveira trabalha com desenvolvimento de software a mais de 10 anos. É técnico em informática, bacharel em ciência da computação, especialista em engenharia de software, além de ser Oracle Certified Java Programmer 6 (OCJP 6). Suas áreas preferidas são desenvolvimento web e games.