Hoje em dia é praticamente impossível utilizar um sistema sem banco de dados. Podemos encontrarmos sistemas para cálculos ou apenas executar ações específicas que não precisem de banco de dados, mas, mesmo assim, existe a persistência de dados, seja em um array, um arquivo de configuração ou parâmetros em txt, etc. Hoje vamos ver como manipular arquivos “.txt“.
A versão do PHP utilizada nesse post é a 5.5, o servidor pode ser qualquer distribuição linux, mas estou utilizando o Ubuntu Server 14.04.
Primeiro vamos aprender como abrir e fechar um arquivo.
<?php $arquivo = '/tmp/arquivo.txt'; $fp = fopen($arquivo, 'w'); fclose($fp);
Note que passamos dois parâmetros na função fopen() que é responsável por abrir o arquivo.
O primeiro parâmetro é o local que está o nosso arquivo, o segundo é o modo que ele será aberto. O modo utilizado em nosso exemplo foi o ‘w’, que abre o arquivo para somente escrita.
Abaixo estão os modos existentes para 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 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. |
‘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. |
Agora que vimos como abrir o arquivo, vamos fazer uma gravação no arquivo criado acima utilizando a função fwrite().
<?php
$arquivo = '/tmp/arquivo.txt';
$conteudo = 'Teste de gravação\r\n';
$fp = fopen($arquivo, 'a');
fwrite($fp, $conteudo);
fclose($fp);
Colocamos o “\r\n” para que a gravação da última posição do ponteiro seja recuado na linha de baixo. Fácil, não?
E se nós quisermos fazer a leitura do arquivo? Simples como gravar o texto!
Utilizaremos a função fgets(), feof() e uma estrutura em loop para percorrer o arquivo do início ao fim.
<?php
$arquivo = '/tmp/arquivo.txt';
$fp = fopen($arquivo, 'r');
while(!feof($fp)) {
$linha = fgets($fp, 4096);
echo $linha;
}
fclose($fp);
O arquivo será aberto com o ponteiro posicionado no início do arquivo e enquanto não for final do arquivo, o script irá ler linha a linha ate o final do arquivo. Note que no segundo parâmetro da função fgets() colocamos 4096, isto quer dizer que o script irá ler até 4096 bytes de dados em cada linha.
Agora vamos deixar o script um pouco mais completo.
Um arquivo que faz a gravação
<?php
$arquivo = '/tmp/arquivo.txt';
$conteudo = 'Teste de gravação\r\n';
if (!file_exists($arquivo)) {
$fp = fopen($arquivo, 'w');
} else {
$fp = fopen($arquivo, 'a');
}
fwrite($fp, $conteudo);
fclose($fp);
<?php
$arquivo = '/tmp/arquivo.txt';
if (!file_exists($arquivo)) {
echo “O arquivo não existe”;
} else {
$fp = fopen($arquivo, 'a');
while(!feof($fp)) {
$linha = fgets($fp, 4096);
echo $linha;
}
fclose($fp);
}
Bom pessoal, hoje nós vimos o básico de como manipular arquivos de texto.
Não deixem de visitar o site e conferir outras matérias super interessantes.
Um abraço e até a próxima!
Muito bacana. Bom para iniciantes :)
Obrigado Evaldo.
Nesse artigo estou realmente focando o básico, mas estou preparando material de nível mais avançado.
Tem alguma matéria que você gostaria de ver?
Queria que você fala -se sobre manipular dois ou mais arquivos e como comparar registros entre eles. Por exemplo identificar registros iguais.
Saulo você conseguiu fazer funcionar?
muito bom, gostaria de saber se tem como abrir um arquivo já existente e acrescentar mais conteúdo a partir de uma linha especifica?
Olá
Já procurei pala intenet quase toda e nao achei o que preciso, por isso estou aqui pedindo a ajuda de voces, tenho um arquivo em teste.TXT que contém as seguintes Linhas.
Ex:
01 02 03 04 05
01 02 03 04 06
01 02 03 04 07
01 02 03 04 08
E por ai vai…
E preciso pegar as informações dessas linhas e mostrar na tela da seguinte forma.
Você teria feito 1 acertos em 150.
Você teria feito 2 acertos em 33 .
Você teria feito 3 acertos em 1.
Você não teria feito 4 acertos.
Você não teria feito 5 acertos.
Será que alguém pode me ajudar?
Obrigado.