Nesse tutorial você vai aprender como manipular arquivos em PHP.
Disclaimer: Esse post é uma adaptação do artigo original publicado por Samuel Conradi, e veio parar no Eu Faço Programas como uma dica do leitor Henrique Rodrigues.
Mas por que manipular arquivos via PHP?
A princípio, você pode usar a manipulação de arquivos para várias coisas tais como:
- Fazer um gerenciador de arquivos remoto;
- Editar um arquivo .css remotamente em um sistema gerenciador de conteúdo qualquer;
- Salvar informações de acesso em um arquivo de log;
- Criar um contador para seu site.
Dessa forma, ao manipular arquivos em PHP você até mesmo substituir um programa SGBD em tarefas corriqueiras em que dados simples são manipulados!
Funções em PHP para manipular arquivos
Em resumo, as funções que utilizaremos em todo tutorial são:
- fopen() – ‘Abre’ o arquivo para que possa ser manipulado.
- fgets() – Pega uma linha do arquivo até o máximo de 1024bytes.
- feof() – Durante a leitura de um arquivo, avisa se chegou ao final.
- file_get_contents() – Pega todo conteúdo do arquivo aberto como uma string.
- ftruncate() – Reduz o tamanho do arquivo. Usado para apagar seu conteúdo.
- fwrite() – Escreve no arquivo.
- unlink() – Apaga o arquivo indicado.
Menu: Tutorial Como Manipular Arquivos em PHP COM EXEMPLOS
- Criar arquivos em PHP
- Ler arquivos em PHP
- Escrever arquivos em PHP
- Alterar Conteúdo em arquivos PHP
- Deletar arquivos em PHP
#1 Criar arquivos em PHP
Primeiramente, vamos criar o nosso arquivo em PHP. Para isso existe a função fopen().
Com esta função podemos criar qualquer arquivo novo. Sua sintaxe é a seguinte:
fopen ($nomedoarquivo, $modo);
Como se pode notar, a função fopen possui dois argumentos: O nome do arquivo e o modo que esse arquivo será criado.
Dessa forma:
- $nomedoarquivo – O nome do arquivo pode conter o caminho absoluto onde você deseja criar o seu arquivo. Por exemplo, ‘www/programa/arquivo.txt’.
- $modo – O modo indica as permissões de acesso para o arquivo que foi criado. Por exemplo, ele pode ser criado apenas para leitura (consulta de dados) ou para escrita e leitura.
Modos de arquivos em PHP
Assim sendo, segue abaixo a tabela com os modos de arquivos retirados da documentação oficial do PHP:
MODO / DESCRIÇÃO | |
‘w’ | Abre o arquivo para apenas escrita. Assim coloca o ponteiro do arquivo no começo do arquivo e diminui(trunca) o tamanho do arquivo para zero. Se o arquivo não existe, tenta criá-lo. |
‘w+’ | Abre o arquivo para leitura e escrita; Primeiro coloca o ponteiro do arquivo no começo, diminuindo (truncando) o tamanho do arquivo para zero. Se o arquivo não existe, tenta criá-lo. |
‘r’ | Abre o arquivo somente para leitura; coloca o ponteiro de escrita no começo do arquivo. [Retorna um erro caso o arquivo não exista e não tenta cria-lo.] |
‘r+’ | Abre para leitura e escrita; coloca o ponteiro de escrita no começo do arquivo. [Retorna um erro caso o arquivo não exista e não tenta cria-lo.] |
‘a’ | Abre para somente para escrita somente; coloca o ponteiro do arquivo no final. Se o arquivo não existir, tenta criá-lo. |
‘a+’ | Abre o arquivo para leitura e escrita; coloca o ponteiro do arquivo no final. Se o arquivo não existir, tenta criá-lo. |
‘x’ | Cria e abre o arquivo para escrita somente; coloca o ponteiro no início do arquivo. Se o arquivo já existe, a chamada a fopen() irá falhar, retornando FALSE, gerando um erro nível E_WARNING. Se o arquivo não existe, tenta criá-lo. Esta opção é suportada no PHP 4.3.2 e posteriores, e somente funciona em arquivos locais. |
‘x+’ | Cria e abre um arquivo para escrita e leitura; coloca o ponteiro do arquivo no início. Se o arquivo já existe, a chamada a fopen() irá falhar, retornando FALSE, gerando um erro nível E_WARNING. Se o arquivo não existe, tenta criá-lo. Esta opção é suportada no PHP 4.3.2 e posteriores, e somente funciona em arquivos locais. |
Seguiremos com alguns exemplos práticos:
Exemplo #1: Criar um novo arquivo para escrita em PHP
<?php $arquivo = fopen('meuarquivo.txt','w'); if ($arquivo == false) die('Não foi possível criar o arquivo.'); ?>
A princípio o código acima cria um novo arquivo (para escrita somente) no diretório corrente do arquivo PHP executado.
Tenha cuidado pois o modo ‘w’ coloca o ponteiro de escrita no início do arquivo. Portanto se o arquivo já existir, ele deletará todo o conteúdo!
Se a função funcionar ele retorna o ponteiro do arquivo. Contudo caso a função falhar por qualquer motivo, a função retorna false.
Exemplo #2 – Criar um novo arquivo para leitura e escrita em PHP
<?php $arquivo = fopen('meuarquivo.txt','w+'); if ($arquivo == false) die('Não foi possível criar o arquivo.'); ?>
Assim como no Exemplo 1, o código acima cria um novo tanto para leitura como para escrita no diretório corrente do arquivo PHP executado.
O modo ‘w+’ coloca o ponteiro no início do arquivo. Se o arquivo já existir, ele deletará todo o conteúdo.
Exemplo #3 – Abrir um arquivo para leitura com o modo ‘r’
Pode ser que você não queira deletar o conteúdo mas acrescentar mais informações quando o arquivo já existir. Nesse caso você pode utilizar a função a seguir, por exemplo:
<?php $arquivo = fopen('meuarquivo.txt','r'); if ($arquivo == false) die('O arquivo não existe.'); ?>
O modo ‘r’ abre o arquivo. Em seguida ele coloca o ponteiro no início do arquivo e lê todo seu conteúdo até o final.
Use o modo ‘r+’ para ativar também a escrita junto com a leitura. Dessa forma, como o ponteiro é posicionado no início do arquivo, o novo conteúdo ficará no início e não no final.
Da mesma forma dos exemplos anteriores, caso o arquivo não exista, ele retorna um erro e não tenta cria o arquivo. Caso você queira criar o arquivo caso ele não exista, você pode usar o modo ‘a’.
Exemplo #4 – O modo ‘a’
‘E se eu quiser posicionar o ponteiro no final do arquivo???’
<?php $arquivo = fopen('meuarquivo.txt','a'); if ($arquivo == false) die('Não foi possível criar o arquivo.'); ?>
Da mesma forma que o modo ‘w’, você pode usar o modo ‘a’ ou ‘a+’ para criar o seu novo arquivo com as permissões de leitura/escrita respectivamente. Se o arquivo já existir, ele não irá truncar o arquivo (não deleta nenhum conteúdo) e irá colocar o ponteiro no final para que a leitura/escrita continue a partir daí.
#3 Ler arquivos em PHP
Agora que já aprendemos a criar e abrir nossos arquivos, vamos ver como se faz para lê-los. Para isso temos a função fgets().
Sendo assim a função fgets() é usada para ler um arquivo linha por linha. Essa função aceita dois tipos de parâmetros, veja:
fgets($ponteiro, $tamanho);
Os argumentos são o ponteiro e o tamanho em bytes:
- $ponteiro – O ponteiro aqui utilizado, está armazenado na variável que você usou para abrir ou criar o arquivo.
- $tamanho – Como já foi dito, é o tamanho em número de bytes que deve ser lida a linha do arquivo. Se não for especificado, o programa irá ler até o final da linha (até um número máximo de 1024 caracteres).
Exemplo #5 – Ler a primeira linha do arquivo em PHP
No código abaixo primeiramente abrimos um arquivo com o modo ‘r’ que posiciona o ponteiro no início do arquivo. Em seguida efetuaremos o comando fgets() sem o parâmetro de tamanho. Isso quer dizer que toda primeira linha do arquivo está sendo lida.
Dessa forma, o código de exemplo:
<?php $arquivo = fopen('meuarquivo.txt','r'); if ($arquivo == false) die('Não foi possível abrir o arquivo.'); $linha = fgets($arquivo); echo $linha; fclose($arquivo); ?>
Observe também que utilizamos a função fclose() para fechar o arquivo que está aberto. Procure imaginar como se, em seu desktop, você tivesse aberto um arquivo, alterado-o e depois fechado. Sob o mesmo ponto de vista, o processo é o mesmo, e temos funções específicas para cada uma dessas ações (abrir, alterar e fechar).
Exemplo #6 – Ler um determinado número de bytes
Aqui nosso programa irá imprimir os primeiro 64 palavras da primeira linha do ‘meuarquivo.txt’. Sendo assim o código seria:
<?php $arquivo = fopen('meuarquivo.txt','r'); if ($arquivo == false) die('Não foi possível abrir o arquivo.'); $linha = fgets($arquivo, 64); echo $linha; fclose($arquivo); ?>
Exemplo #7 – Retornar o arquivo inteiro linha por linha
No código abaixo usaremos um loop contínuo (eterno) pegando linha por linha do arquivo. Dessa forma, quando é verificado que a variável linha retornou vazia, ele dá um break que pára a repetição e fecha o arquivo.
Assim fica a pergunta: ‘E se meu arquivo tiver uma linha vazia?’. Não existe linha vazia entre o início e o final de um documento.
Portanto que determinada linha não tenha nada escrito, ela contém um marcador que indica a quebra de linha. Sendo assim:
<?php $arquivo = fopen('meuarquivo.txt','r'); if ($arquivo == false) die('Não foi possível abrir o arquivo.'); while(true) { $linha = fgets($arquivo); if ($linha==null) break; echo $linha; } fclose($arquivo); ?>
Outra forma mais interessante para ler um arquivo linha por linha (somente ler) é usando a função feof(). Sua função é detectar o final de um arquivo (f-End-Of-File). Porém, como já foi dito, essa função só é indicada caso você queria somente ler o arquivo, já que não funcionará com arquivos abertos com as opções ‘a’, ‘w’ e ‘x’. Por exemplo:
<?php $arquivo = fopen('meuarquivo.txt','r'); if ($arquivo == false) die('Não foi possível abrir o arquivo.'); // imprime linha por linha ate detectar o final while(!feof($arquivo)) { echo fgets($arquivo). '<br />'; } fclose($arquivo); ?>
Observação: Sistemas operacionais diferentes têm convenções de delimitação de linhas diferentes. Assim, quando você escreve num arquivo e deseja inserir uma quebra de linha, você precisa utilizar o(s) caractere(s) de fim de linha adequado(s) em seu sistema operacional. Por exemplo, sistemas baseados no Unix utilizam n como final de linha, sistemas baseados no Windows usam rn e Mac OS usa r.
Exemplo #8 – Ler todo arquivo em um único passo
Em muitos casos temos que ler o arquivo todo. Contudo ler linha por linha nesses casos dá mais trabalho.
Portanto nesses casos utilizamos a funcao file_get_contents() que retorna todo o conteúdo de determinado arquivo. Por exemplo:
<?php $arquivo = fopen('meuarquivo.txt','r'); $string = file_get_contents('meuarquivo.txt'); echo $string; fclose($arquivo); ?>
Dessa forma, o código acima lê todas informações contidas no arquivo ‘meuarquivo.txt’.
Assim é importante ressaltar que não é recomendado ler arquivos muitos grandes de uma só vez.
Por outro lado é recomendado ler o arquivo em partes.
#3 Escrever no arquivo em PHP
Escrever nos arquivos usando PHP é também muito fácil.
Primeiro você deve ter certeza que seu arquivo aberto tenha permissão para escrita. Depois basta utilizar a função fwrite e seus parâmetros. Dessa forma, segue a estrutura da função:
fwrite($ponteiro, $string, $tamanho);
Os argumentos são o ponteiro, a string e o tamanho em bytes.
- $ponteiro – O ponteiro aqui utilizado, está armazenado na variável que você usou para abrir ou criar o arquivo.
- $string – O conteúdo textual que você deseja escrever em seu arquivo.
- $tamanho – É o tamanho em número de bytes que deve ser gravado no arquivo. Opcional.
Exemplo #9 – Escrever uma simples linha em um arquivo
No código abaixo abrimos o arquivo indicado no modo ‘w+’, permitindo sua escrita.
Caso o arquivo não exista, ele será criado. Em seguida é gravado um pequeno texto em sua linha.
É importante observar que o modo ‘w’ cria arquivos mas também trunca o arquivo caso ele exista, ou seja, deleta todo seu conteúdo assim que ele é aberto.
Assim sendo:
<?php $arquivo = fopen('meuarquivo.txt','w+'); if ($arquivo) { if (!fwrite($arquivo, 'Novo conteúdo')) die('Não foi possível atualizar o arquivo.'); echo 'Arquivo atualizado com sucesso'; fclose($arquivo); } ?>
Exemplo #10 – Escrever no início de um arquivo
Para escrevermos no início do arquivo podemos abri-lo com a opção ‘r+’.
Contudo abriremos o arquivo com a opção ‘a+’, que coloca o ponteiro no final do arquivo, e utilizaremos a função rewind() que move o ponteiro para o início do arquivo.
Por exemplo:
<?php // abre o arquivo colocando o ponteiro de escrita no final $arquivo = fopen('meuarquivo.txt','a+'); if ($arquivo) { // move o ponteiro para o inicio do arquivo rewind($arquivo); if (!fwrite($arquivo, 'Novo conteúdo')) die('Não foi possível atualizar o arquivo.'); echo 'Arquivo atualizado com sucesso'; fclose($arquivo); } ?>
Exemplo #11 – Escrever no final do arquivo
Para escrever no final do arquivo, utilizaremos o mesmo comando do exemplo anterior. Contudo não utilizaremos a função rewind() para mudar o ponteiro de posição.
Sendo assim:
<?php // abre o arquivo colocando o ponteiro de escrita no final $arquivo = fopen('meuarquivo.txt','r+'); if ($arquivo) { if (!fwrite($arquivo, 'Novo conteúdo')) die('Não foi possível atualizar o arquivo.'); echo 'Arquivo atualizado com sucesso'; fclose($arquivo); } ?>
#5 Alterar conteúdo em PHP
Em conclusão à esse tutorial, vamos falar sobre como alterar o conteúdo de um arquivo.
Na teoria, o que devemos fazer é ler o arquivo, linha por linha, em busca do conteúdo a ser alterado. Em seguida, vamos colocando tudo dentro de uma nova string. Dessa forma, quando a linha com o conteúdo a ser alterado for encontrada, fazemos as modificações e re-escrevemos o arquivo utilizando-se da nova string.
No caso de alterar um arquivo, é importante verificarmos primeiramente se ele existe. Sendo assim poderíamos usar a função file_exists() , que verifica a existência de um arquivo. Mas como usamos o parâmetro ‘r+’ para abrir o arquivo, já será retornado um erro indicando que o arquivo não existe.
Isso porque, ao contrário dos outros parâmetros, o ‘r’ não tenta criar um novo arquivo caso o caminho indicado não exista.
Primeiramente, para substituir o conteúdo do arquivo original pelo conteúdo alterado, vamos apagar o conteúdo do arquivo atual. Sendo assim usaremos a função ftruncate(). Por exemplo:
Exemplo #12 – Ler e alterar o conteúdo em PHP
<?php // abre o arquivo colocando o ponteiro de escrita no final $arquivo = fopen('meuarquivo.txt','r+'); if ($arquivo) { while(true) { $linha = fgets($arquivo); if ($linha==null) break; // busca na linha atual o conteudo que vai ser alterado if(preg_match("/José da Silva:/", $linha)) { $string .= str_replace("José da Silva: 27 anos", "José da Silva: 28 anos", $linha); } else { // vai colocando tudo numa nova string $string.= $linha; } } // move o ponteiro para o inicio pois o ftruncate() nao fara isso rewind($arquivo); // truca o arquivo apagando tudo dentro dele ftruncate($arquivo, 0); // reescreve o conteudo dentro do arquivo if (!fwrite($arquivo, $string)) die('Não foi possível atualizar o arquivo.'); echo 'Arquivo atualizado com sucesso'; fclose($arquivo); } ?>
#6 Deletar arquivos em PHP
Enfim, para deletar arquivos, utilizamos a função unlink().
Para escrever esse texto, utilizei como referência o site PHP-Learn-it.com, o W3Schools e o manual do PHP. Espero que em algum momento essa referência sirva a você!
Curso de PHP Completo
Anda em busca de um curso completo de PHP 7 que seja acessível e traga exemplos de aplicações práticas? Este curso, que você encontra na plataforma Udemy, traz tudo que você precisa saber para criar seu próprio website.