Como ler ou escrever em arquivos TXT - PHP



Neste tutorial mostraremos como ler ou escrever conteúdo em um arquivo de texto TXT. Para isto, vamos utilizar duas funções nativas do PHP: file_get_contents() para ler todo o conteúdo de um arquivo em uma string e file_put_contents() para escrever uma string em um arquivo.

Essas funções podem ser utilizadas para gravar, consultar e manipular informações sem precisar de um banco de dados. São muito utilizadas em sistemas de logs para gravar erros de aplicação, sistemas com dados estruturados Json e sistemas de dados simples como contadores, por exemplo.

Como exemplo, vamos construir uma lista de tarefas onde os dados ficarão gravados em um arquivo txt, dispensando a utilização de um banco de dados.

1. Lendo um arquivo TXT

1.1. Podemos ler todo o conteúdo de um arquivo em uma string, usando a função file_get_contents().

1.1.1. A função file_get_contents() é o método preferível para ler o conteúdo de um arquivo em uma string, pois utiliza técnicas de mapeamento de memória, que quando suportadas pelo servidor, melhoram a performance da leitura.

1.1.2. O arquivo de texto criado poderá ter qualquer tipo de extensão (.txt, .php, .doc, .xls, json, etc). Entretanto, vamos adotar a extensão .txt como padrão para o nosso tutorial.

Sintaxe:

file_get_contents(path, include_path, context, offset, max_length) 

 Parâmetros:

Parâmetro

Descrição
 path  Obrigatório. Especifica o caminho do arquivo que será lido.
 include_path  Opcional. Defina este parâmetro como '1' se você deseja pesquisar o arquivo no "include" (em php.ini)
 context  Opcional. Especifica o contexto do identificador de arquivo. Contexto é um conjunto de opções que podem modificar o comportamento de um fluxo (streams). Pode ser ignorado usando NULL.
 offset  Opcional. Especifica o ponto no arquivo onde a leitura deve começar. Os valores negativos contam a partir do final do arquivo.
 max_length  Opcional. Especifica o comprimento máximo dos dados lidos.

 1.2. Portanto, a função file_get_contents() lê e retorna o conteúdo do arquivo em uma string, começando a partir de offset até max_length. Caso esses parâmetros não estejam especificados, a função file_get_contents() irá ler e retornar todo o conteúdo do arquivo.

1.3. Em caso de falha, a função file_get_contents() retornará false.

1.4. Para utilizar os parâmetros avançados include_path e context, leia: include_path  e streams no PHP. Neste tutorial não usaremos estes parâmetros.

2. Escrevendo em um arquivo TXT

2.1. Podemos gravar dados em um arquivo TXT por meio da função file_put_contents().

Sintaxe:

file_put_contents(path, data, mode, context)  

Parâmetros:

Parâmetro

Descrição
 path

 Obrigatório. Especifica o caminho do arquivo no qual se deseja gravar. Se o arquivo não existir, esta  função irá criar um.

 data  Obrigatório. Os dados a serem gravados no arquivo. Pode ser uma string, um array ou um fluxo de dados (data stream)
 mode  Opcional. Especifica como abrir / escrever no arquivo. Valores:
  • FILE_USE_INCLUDE_PATH - procura pelo nome do arquivo nos diretórios de "include". Veja include_path para mais informações. 
  • FILE_APPEND - Se o arquivo já existir, acrescenta os dados ao arquivo ao invés de sobrescrevê-lo.
  • LOCK_EX - Coloca um bloqueio exclusivo no arquivo enquanto grava nele.
 context  Opcional. Especifica o contexto do identificador de arquivo. Contexto é um conjunto de opções que podem modificar o comportamento de um fluxo (streams).

2.2. Portanto, a função file_put_contents() grava o conteúdo de uma string em um arquivo, respeitando os parâmetros acima.

2.3. Se o nome do arquivo especificado no parâmetro path não existir, este arquivo será criado automaticamente. Caso contrário, o arquivo existente será sobrescrito, a não ser que a flag FILE_APPEND esteja definida.

2.2.1. Caso o mode FILE APPEND estiver definido, a string será incluída no final do arquivo.

2.2.2. Caso o mode LOCK_EX estiver definido, o arquivo será bloqueado.

2.2.2. Para utilizar os parâmetros avançados include_path e context, leia: include_path  e streams no PHP. Neste tutorial não usaremos estes parâmetros.

2.3. Procure sempre utilizar o mode FILE APPEND para evitar a exclusão do conteúdo já existente no arquivo.

3. Exemplo prático

3.1. Para exemplificarmos o uso das funções de leitura e gravação de dados em arquivos, vamos criar uma lista de tarefas onde o usuário adiciona as tarefas que deverão ficar gravadas em um arquivo txt, dispensando o uso de um banco de dados.

3.2. Para montarmos o nosso sistema vamos criar três arquivos: index.php, receive.php e delete.php.

3.2.1. O arquivo index.php é responsável pelo formulário de adição de novas tarefas, fazer a leitura do arquivo tarefas.txt (se ele existir), exibir a lista de tarefas e mostrar o botão para excluir a lista na tela.

3.2.2. O arquivo receive.php é responsável por obter a tarefa enviada pelo formulário através da requisição HTTP (via POST) e escrever essa tarefa no final do arquivo tarefas.txt, pois utilizamos o parâmetro FILE APPEND na função file_put_contents().

3.2.3. O arquivo delete.php é responsável por excluir o arquivo tarefas.txt através da função unlink().

3.2.4. Atenção: Os arquivos citados acima deverão estar contidos na mesma pasta.

3.3. Seguem abaixo os arquivos com os seus respectivos códigos.

index.php

<h1>Formulário - Listas de Tarefas</h1> 
<form method="POST" action="receive.php">
    <input type="text" name="tarefa" placeholder="Digite uma atividade" />
    <input type="submit" value="Enviar">    
</form>
<?php

// pega dados do arquivo tarefas.txt e coloca na tela
if (file_exists("tarefas.txt")) {
    $lista = file_get_contents("tarefas.txt");
    $lista_array = explode("\n", $lista);
    foreach($lista_array as $lista_item) {
        echo $lista_item.'<br/>';
    }
} else {
    $lista = null;
}

?>
<br/>
<!--deleta o arquivo tarefas.txt -->
<button onclick="window.location.href = 'delete.php'">Excluir Lista</button>

receive.php

<?php
// pega dados do formulário ($tarefa)
$tarefa = filter_input(INPUT_POST, 'tarefa', FILTER_SANITIZE_SPECIAL_CHARS);

// escreve dados $tarefa no final do arquivo tarefas.txt (FILE_APPEND)
if ($tarefa) {
   file_exists("tarefas.txt") ? $text =  "\n".$tarefa : $text = $tarefa;
   file_put_contents('tarefas.txt', $text, FILE_APPEND);      
}

header('Location: index.php');

delete.php

<?php
// exclui arquivo tarefas.txt
if (file_exists("tarefas.txt")) {
    unlink('tarefas.txt');
}    

header('Location: index.php');

 laughing Para testar os códigos acima, acesse: https://www.visualdicas.com.br/exemplos/php/exemplo01/index.php.

 Observações

3.4. No arquivo index.php fizemos a leitura do arquivo tarefas.txt, da seguinte forma:

3.4.1. Primeiro, por intermédio da função file_exists("tarefa.txt") verificamos se o arquivo tarefas.txt existe ou não. Leia Verificar se um arquivo ou um diretório existe com PHP.

3.4.2. Depois, se o arquivo tarefas.txt existir, fazemos a leitura  dele usando a função file_get_contents("tarefas.txt"). Observe que utilizamos apenas o parâmetro obrigatório path para ler em string todo o conteúdo do arquivo. Esse conteúdo ficará então armazenado na variável $lista.

3.4.3. Para exibirmos a lista de tarefas na tela, vamos primeiro criar um array para armazenar partes da string (tarefas) que foram separadas pela função explode(). Para isto, usamos como delimitador o comando "\n" que indica quebra de linha. Depois do conteúdo estar separado em elementos do array, podemos exibir cada elemento (tarefa) por meio do construtor foreach(). Leia Como dividir strings em PHP (separe e-mails, urls, textos, tags...).

3.4.4. Veja abaixo como deve ficar o nosso exemplo após a inclusão de algumas tarefas.

3.5. No arquivo receive.php gravamos o conteúdo da seguinte forma:

3.5.1. Primeiro obtemos o valor enviado pelo formulário através do método POST (requisição HTTP) e o atribuímos à variável $tarefa.

3.5.2. Usando o operador ternário podemos atribuir à variável $text os valores (leia Como realizar atribuição condicional a uma variável PHP (Operador Ternário):

3.5.2.1. Se o arquivo tarefas.txt existir, a variável $text = "\n".$tarefa, ou seja, o valor da variável $text será a concatenação do comando "\n" para quebrar a linha com a variável $tarefa. Isto promoverá a quebra de linha antes de inserir o valor da variável no arquivo txt, criando uma lista vertical de tarefas.

3.5.2.2. Se o arquivo txt não existir ainda, a variável $text será igual a $tarefa. Como é a primeira tarefa adicionada, não há a necessidade da quebra de linha.

3.5.3. Finalmente usamos a função file_put_contents('tarefas.txt', $text, FILE_APPEND) para escrever o valor de $text no final do arquivo txt, pois ativamos o parâmetro FILE_APPEND.

3.5.3.1. Observe que utilizamos apenas os parâmetros obrigatórios path e data, e o parâmetro FILE_APPEND para gravar o valor recebido pelo formulário no final do arquivo tarefas.txt, evitando-se portanto a sobreposição do conteúdo.

3.5.3.2. É importante frisarmos que se não existir o arquivo txt, a função irá criar um conforme definido pelo parâmetro path.

3.6. No arquivo delete.php excluímos o arquivo tarefas.txt ao clicar no botão  "Excluir Lista". Para isto utilizamos a função unlink('tarefas.txt') que exclui o arquivo e limpa o cache também. Leia https://www.php.net/manual/pt_BR/function.unlink.php

3.7. Exemplo do resultado da nossa lista de tarefas:

 😀 Para testar, acesse: https://www.visualdicas.com.br/exemplos/php/exemplo01/index.php

Documentação Oficial

1. [Documentação PHP - Função file_get_contents()] » Sobre a função file_get_contents().

2. [Documentação PHP - Função file_put_contents()] » Sobre a função file_put_contents().

O anúncio abaixo ajuda manter o Portal Visual Dicas

Comentários

×

Infomações do site / SEO