Pular para o conteúdo

Manipulação de arquivos com PHP

Embora não muito utilizado, às vezes nos deparamos com situações em que não há banco de dados. Nestes casos a solução é partir para os .txt. Este artigo nos apresenta as principais funções do PHP para tal.
Igor H. da Cruz spymam
Hits: 85.491 Categoria: PHP Subcategoria: Manipulação de Arquivos
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Funções para txt

Vamos abordar as seguintes funções:
  • fopen() - abre um arquivo
  • fwrite() - escreve em um arquivo
  • fclose() - fecha um arquivo
Algumas referências: Exemplo de uma manipulação:

<?php
// Abre ou cria o arquivo exemplo1.txt
// "a" representa que o arquivo é aberto para ser escrito
$fp = fopen("exemplo1.txt", "a");

// Escreve "primeiro exemplo" no exemplo1.txt
$escreve = fwrite($fp, "primeiro exemplo");

// Fecha o arquivo
fclose($abre);
?>

Como resultado é criado um arquivo chamado exemplo1.txt, escrito "primeiro exemplo". Se você repetir a ação, "primeiro exemplo" será escrito novamente no fim desse arquivo.

É importante notar que você tem diversas maneiras de abrir um arquivo, que são representadas por letras. No exemplo acima utilizamos o modo "a", veja abaixo a lista de todos os modos e suas descrições:
  • 'r' - abre somente para leitura; coloca o ponteiro no começo do arquivo.
  • 'r+' - abre para leitura e gravação; coloca o ponteiro no começo do arquivo.
  • 'w' - abre somente para gravação; coloca o ponteiro no começo do arquivo e apaga o conteúdo que já foi escrito. Se o arquivo não existir, tenta criá-lo.
  • 'w+' - abre para leitura e escrita; coloca o ponteiro no início do arquivo e apaga o conteúdo que já foi escrito. Se o arquivo não existir, tenta criá-lo.
  • 'a' - abre o arquivo somente para escrita; coloca o ponteiro no fim do arquivo. Se o arquivo não existir, tenta criá-lo.
  • 'a+' - abre o arquivo para leitura e gravação; coloca o ponteiro no fim do arquivo. Se o arquivo não existir, tenta criá-lo.
Com estas três funções você pode criar, escrever e fechar um arquivo facilmente. Lembrando que você também pode usar a função fputs() (http://www.php.net/manual/pt_BR/function.fputs.php) para escrever em um arquivo.

Funções extra: Primeiro vamos criar um formulário simples para o usuário cadastrar seus dados, que pode ser chamado de form.html:

CADASTRO:

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
<form method="POST" action="cadastra.php">
Nome: <input type="text" size="10" name="nome"><br>
E-mail: <input type="text" size="10" name="email"><br>
Endereço: <input type="text" size="10" name="endereco"><br>
Telefone: <input type="text" size="10" name="telefone"><br>
<br><input type="submit" value="cadastrar">
</form>

Este formulário passará as variáveis nome, email, endereco e telefone, que serão cadastradas em seu respectivo arquivo de texto. A ação do formulário está como cadastra.php, que será o arquivo contendo o necessário para cadastrar o usuário no arquivo.

<?php
// Verifica se todos os campos foram preenchidos
if (!$nome || !$email || !$endereco || !$telefone) {
    echo "preencha todos os campos";
} else {
    // Verifica se um usuário com o mesmo nome já foi cadastrado
    if(!file_exists($nome . ".txt")) {
        // Criamos o arquivo do usuário com w+
        $cria = fopen($nome . ".txt", "w+");

        // Aqui iremos declarar as informações do usuário
        // São separadas por | para depois podermos recupera-las com explode
        $dados .= "$nome|";
        $dados .= "$email|";
        $dados .= "$endereco|";
        $dados .= "$telefone";

        // Agora escrevemos estes dados no arquivo
        $escreve = fwrite($cria,$dados);

        // Fechando o arquivo
        fclose($cria);

        // Exibe a mensagem de usuário cadastrado
        echo "usuário cadastrado com sucesso!";
    } else {
        // Se já houver um usuário cadastrado com o mesmo nome
        echo "um usuário chamado $nome já foi cadastrado";
    }
}
?>

Como você pode ver, agora estamos interagindo com funções básicas, com as funções que vimos neste artigo. Com estes dois arquivos criados nós já temos o envio de dados para um arquivo de texto, onde os valores são separados por "|".

O caracter "|" será utilizado para separar os dados, com se fossem colunas. Com a função explode poderemos separar os dados a gosto.

Por fim, criaremos um arquivo para visualizar todos os usuários cadastrados. Estaremos usando a função readdir(), que é essencial para quem usar sistemas desse tipo.

<?php
// Primeiro definiremos onde estão os arquivos
// ./ significa que os arquivos estão no diretório atual
$dir = "./";

// Abre o diretório $dir
$abredir = opendir($dir);

// Faz o loop para a exibição de usuários
while ($arqs = readdir($abredir)) {
    // Aqui fazemos o php tirar "." e ".." que são "bugs" do readdir()
    // Também faz com que só sejam abertos arquivos de texto
    if ($arqs != "." && $arqs != ".." && is_file($arqs) && ereg(".txt", $arqs)) {

        // Agora iremos abrir arquivo por arquivo, e exibir os dados do usuário
        // Usamos o "r" pois somente queremos ler o arquivo
        $abre = fopen($arqs,"r");

        // Usamos fread agora para ler o arquivo
        $le = fread($abre,filesize($arqs));

        // Agora vem o grande truque, separamos os dados pelo "|" com explode
        $dado = explode("|",$le);

        // Define os registros
        $nome = $dado['0'];
        $email = $dado['1'];
        $endereco = $dado['2'];
        $telefone = $dado['3'];

        // Vamos mostrar os dados que obtivemos
        echo "Usuário: <b>$nome</b><br>";
        echo "nome: $nome<br>";
        echo "e-mail: $email<br>";
        echo "endereço: $endereco<br>";
        echo "telefone: $telefone<br><br>";
    }
}

// Fecha o diretório
closedir($abredir);
?>

Assim é feito um simples script, com um banco de dados simulado em um arquivo de texto. Você pode incrementar muito mais e fazer scripts mais amplos e cada vez mais úteis!

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
   1. Funções para txt
Nenhum artigo encontrado.

PEAGLE: Serviço Web de busca indexada em seu servidor local

Gerando documentos PDF com a classe FPDF no PHP

Trabalhando com arquivos em PHP

O perigo no gerenciador de uploads do PHP

Enviar mensagem ao usuário trabalhando com as opções do php.ini

#1 Comentário enviado por reisinho em 08/09/2003 - 23:37h
ticudddddooooooooooo!!!
#2 Comentário enviado por reisinho em 08/09/2003 - 23:38h
todo mundo junto...
3
2
1
..NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP
#3 Comentário enviado por jllucca em 09/09/2003 - 15:56h
Cara, o artigo ta dez! Parabéns! So discordo quanto a "." e ".." serem bugs do "readdir()". Mas, no geral o artigo fico ótimo!
#4 Comentário enviado por Ale_ em 25/05/2004 - 17:56h
Mt bom !!! hehe... ajudou o iniciante aki !!!
#5 Comentário enviado por leandro_hamid em 19/09/2007 - 11:42h
Obrigado pelo artigo, me ajudou bastante ainda mais que eu também sou iniciante mas eu acabei ficando com dúvidas com relação ao código cadastra.php:

1º: Será que não deveria ser passado um 'include' para a chamada do formulário?

Exemplo: include "form.html";

2º: A instrução para a ciração do arquivo não gerará inconsistência?Pois de acordo com a intrução abaixo o arquivo não foi criado.

Exemplo: " $cria = fopen($nome . ".txt", "w+");"

Ps: Se estiver errado favor desconsiderar comentário.
#6 Comentário enviado por manfilho em 04/04/2008 - 22:48h
Olá, eu não sei de onde todo mundo copiou esse exemplo, o primeiro, mas ESTÁ ERRADO

<?php
$fp = fopen("exemplo1.txt", "a");
$escreve = fwrite($fp, "primeiro exemplo");
fclose($abre);
?>


Não é fclose($abre);

Que variável é essa? $abre? o certo é fechar a $fp


<?php
$fp = fopen("exemplo1.txt", "a");
$escreve = fwrite($fp, "primeiro exemplo");
fclose($fp);
?>
#7 Comentário enviado por deadlock em 17/07/2008 - 09:38h
?comentario= aewwwww finalmente achei o que tava procurando... parabens aew mt bom resolveu meu problema vlw mesmo! Parabens
#8 Comentário enviado por facb69 em 01/12/2009 - 13:57h
muito bom o tutorial mas quero apontar uma inconsistência:

// São separadas por | para depois podermos recupera-las com explode
$dados .= "$nome|";

como a variável $dados não existe não se pode usar o operador .= pois ele serve para adicionar valor a uma variável sem perder o que ela já tinha. resumindo: ele soma valores a uma variável já existente.
como $dados não existia, é necessária criá-la bastando remover o ponto.
lembrando que no php não é necessário declarar uma variável, basta criá-la como abaixo:

dados = "$nome|";

as posteriores teriam o operador .= para somar valores.

abraço,

fábio
#9 Comentário enviado por sneeps.ninja em 06/02/2012 - 17:48h
horrivel este plágio, já tem o mesmo código com os mesmos erros

Nem se deu o trabalho de rodar uma vez para ver se dava erro, warning ou notice

quando for plagiar muda ai o nome das variaveis e comente como um profissional

// Abre ou cria o arquivo exemplo1.txt
// PARAMETRO "a" leia a documentacao sobre a funcao: representa que o arquivo é aberto para SOMENTE LEITURA

$fp = fopen("exemplo1.txt", "a"); //OK

// Escreve "primeiro exemplo" no exemplo1.txt //OK
$escreve = fwrite($fp, "primeiro exemplo"); //ONDE USOU A VARIAVEL $ESCREVE? EM LUGAR NENHUM NEM COMENTOU PARA Q SERVE
//$ESCREVE=RETORNA A QTD DE CHAR ESCRITOS NO ARQUIVO

// Fecha o arquivo
fclose($abre); //$ABRE??? $ABRE AONDE??? O NOME DA VARIAVEL QUE USOU NO INICIO SE CHAMA $FP

Contribuir com comentário

Entre na sua conta para comentar.