Escrever e ler em Arquivo TXT com PHP

Aprenda a fazer persistência utilizando arquivos texto e entenda sua importância.

 Escrevendo testes automatizados com PHPUnit

No inicio da Internet, não havia Banco de Dados para armazenas informações como usuários, vendas e qualquer outra informação, então para resolver este problema era utilizado arquivos de texto.

Após o surgimento do Banco de Dados por meados de 1960, a utilização de arquivos texto caiu rapidamente, pois fazer consultas em arquivo de texto é algo muito trabalhoso.

Atualmente existem vários Banco de Dados, como Oracle, MySQL, Firebird, mariaDB e outros, mas mesmo assim todas as linguagens dão suporte para escrita em TXT, sabe por qual motivo?  Imagine que o servidor de dados parou de funcionar, e é necessário registrar este bug em um Log, quem vai assumir esta enorme responsabilidade? Sim, um arquivo TXT!

Os TXT são utilizados para armazenar Logs de erro, pois não dependem de nenhum recurso extra a não ser do servidor e da própria linguagem, você pode utilizar um TXT em uma classe de conexão com o Banco de Dados, onde existem vários métodos para persistência, consulta e conexão, caso houver um erro e entrar no Catch, você pode guardar o erro em um arquivo de Texto.

O PHP assim como o C# por exemplo, permite fazer à escrita facilmente sem muitas linhas de código, mas antes de começar a escrever, devemos entender como isto de fato funciona.

Primeiro devemos abrir o arquivo, fazer a operação de escrita e leitura e por último fechar o arquivo. Enquanto o arquivo estiver aberto, nenhum outro processo poderá utiliza-lo até que nossa aplicação feche a “conexão” com ele.

 

Para gravar uma informação em um TXT, basta utilizar as funções:

fopen – Abre uma conexão com o arquivo.
fwrite – Escreve em um arquivo TXT.
fclose – Fecha a conexão com o arquivo TXT.

Veja a função abaixo que recebe um texto por parâmetro e faz a persistência.

Código 01:

<?php
//Criamos uma função que recebe um texto como parâmetro.
function gravar($texto){
	//Variável arquivo armazena o nome e extensão do arquivo.
	$arquivo = "meu_arquivo.txt";
	
	//Variável $fp armazena a conexão com o arquivo e o tipo de ação.
	$fp = fopen($arquivo, "a+");

	//Escreve no arquivo aberto.
	fwrite($fp, $texto);
	
	//Fecha o arquivo.
	fclose($fp);
}

gravar("Olá, mundo");

?>

No fopen você deve ter notado o uso do “a+”, este é um parâmetro que informa que tipo de ação deve ser tomado ao persistir uma informação, que são elas:

Valor Descrição
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 do arquivo e reduz o comprimento do arquivo para zero. Se o arquivo não existir, tenta criá-lo.
w+ Abre para leitura e escrita; coloca o ponteiro do arquivo no começo do arquivo e reduz o comprimento do arquivo para zero. 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. Isto é equivalente a especificar as flags O_EXCL|O_CREAT para a chamada de sistema open(2).
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. Isto é equivalente a especificar as flags O_EXCL|O_CREAT para a chamada de sistema open(2).

Fonte: http://php.net/manual/pt_BR/function.fopen.php

Para fazer a leitura de um arquivo, não é nada complicado, utilizando a mesma função, deixamos de utilizar o fwrite() para usar o fread().

fread – Lê os bytes de um arquivo especificado.
Fonte: http://php.net/manual/pt_BR/function.fread.php

No código abaixo, fazemos a leitura de todo conteúdo do arquivo de texto. Note o uso do filesize(), esta função é responsável por ler o tamanho do arquivo.

Código 02:

<?php
//Criamos uma função que irá retornar o conteúdo do arquivo.
function ler(){
	//Variável arquivo armazena o nome e extensão do arquivo.
	$arquivo = "meu_arquivo.txt";
	
	//Variável $fp armazena a conexão com o arquivo e o tipo de ação.
	$fp = fopen($arquivo, "r");

	//Lê o conteúdo do arquivo aberto.
	$conteudo = fread($fp, filesize($arquivo));
	
	//Fecha o arquivo.
	fclose($fp);
	
	//retorna o conteúdo.
	return $conteudo;
}

echo ler();

?>

O algoritmo acima faz toda a leitura do arquivo, porém pode ser que ele não quebre uma linha, então utilize a função alternativa a seguir.

Código 03:

<?php
//Criamos uma função que irá retornar o conteúdo do arquivo.
function ler(){
	//Variável arquivo armazena o nome e extensão do arquivo.
	$arquivo = "meu_arquivo.txt";
	
	//Variável $fp armazena a conexão com o arquivo e o tipo de ação.
	$fp = fopen($arquivo, "r");

	//Lê o conteúdo do arquivo aberto.
	while (!feof ($fp)) {
		$valor = fgets($fp, 4096);

		echo $valor."<br>";
	}
	//Fecha o arquivo.
	fclose($fp);
	
	//retorna o conteúdo.
}

echo ler();

?>

Viu só como é fácil? Espero que tenham aprendido e saiba quando utilizar este recurso.

Se houver dúvidas, deixem nos comentários. Até a próxima!!!