+7

Manipulando Arquivos pelo PHP

criado por ... em 10/08/2003 4:43pm
Conforme foi citado no começo do artigo, as funções de manipulação do PHP podem ser usadas para criar um simples banco de dados. Parecido com um banco de dados você pode armazenar informações e depois reaproveitá-las.

Para demonstrar esse uso, iremos criar um sistema simples, que guarda informações de usuários em um arquivo de texto.

As funções que iremos utilizar são fopen(), fwrite() e fread().

Funções extra:
explode() - divide uma string ( http://www.php.net/manual/pt_BR/function.explode.php )
opendir() - abre um diretorio ( http://www.php.net/manual/pt_BR/function.opendir.php )
readdir() - lê os arquivos de um diretório ( http://www.php.net/manual/pt_BR/function.readdir.php )
closedir() - fecha um diretório ( http://www.php.net/manual/pt_BR/function.closedir.php )
file_exists() - verifica se um arquivo existe ( http://www.php.net/manual/pt_BR/function.file-exists.php )

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

CADASTRO:
<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 variaveis 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 ja 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 ja houver um usuário cadastrado com o mesmo nome
        echo "um usuário chamado $nome ja 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 ja 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
// ./ siginifica que os arquivos estão no diretório atual
$dir = "./";

// Abre o diretorio $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: $nome<br>";
        echo "nome: $nome<br>";
        echo "e-mail: $email<br>";
        echo "endereço: $endereco<br>";
        echo "telefone: $telefone<br><br>";
    }
}

// Fecha o diretorio
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!

Comentários:

Mostrando 1 - 10 de 28 comentários
Usuário PHP disse:
Artigo muito bom!!!

Alguém sabe me informar como eu faço para mover arquivos de uma pasta para outra???

Grato,
Marcelo G. Moraes
28/06/2006 7:05am (~15 anos atrás)

Este artigo matou a pau ..parabéns
13/06/2005 8:55am (~16 anos atrás)

Ricardo Sá disse:
Como faço para ler um arquivo byte a byte?
Por exemplo: Tenho o arquivo texto assim..
0125336008
os 4 bytes seriam o codigo
0124
Os proximos 3 bytes uma outra coisa..
336
e os ultimos 3 mais outra coisa qualquer..
008
26/09/2004 9:39pm (~17 anos atrás)

... disse:
use MySQL se voce tem como. se for um banco grande o arquivo de texto fica mto pesado e gera lerdeza.
dreaz
29/04/2004 10:29pm (~17 anos atrás)

Tairo disse:
No caso se eu fosse usar um banco de dados em TXT e outro em mySQL qual seria mais rápido, não em termo de facilidade que eu digo mas sim em termo de velocidade.
11/01/2004 7:04pm (~18 anos atrás)

Miguel Lohan disse:
Gente:

Aqui é um fórum para troca de informações, aqui existe todo nível de pessoas (nível técnico) Alguns são muito feras e sabem tudo, outros como eu não sabem nada :) Acho que qualquer artigo ou contribuição sempre ajuda, o cara ao menos passa a ter idéia de como a coisa funciona e como pode usar, se precisar.

O Que seria do verde se não fosse existissem o amarelo e o vermelho :)

[]'s

Phpman
14/09/2003 8:30am (~18 anos atrás)

Apliquei numa necessidade que eu tinha aqui no trabalho, e funcionou perfeitamente. Obrigado.
05/09/2003 7:05am (~18 anos atrás)

Andreas,
Não leve isso para o lado pessoal, e eu tenho muito a lhe agradecer pelo artigo porque me fez cair a ficha quanto à importância da XML. Me desculpe se, ao comentar seu artigo, você se sentiu ofendido. O que aconteceu foi que eu me libertei de usar o mesmo esquema proposto, que não é errado, funciona bem, era o que eu iria fazer, e criar um sistemeu, no meu padrão, como fazem Oracle, MySQL, MsWord. Você fica dependente da ferramenta deles.
Quanto ao XML não é tão complexo e com a descrição da php.net e os exemplos é tranquilo. Para o MySQL/XML tem uma classe na phpclasses.org. Também do MySQL já me libertei a algum tempo usando a classe adoDB, que é espetacular. O x da programação é aprender a usar as melhores práticas, apenas isso, e esse aprendizado não tem fim. Desculpe e obrigado por me proporcionar esta reflexão.
29/08/2003 6:49am (~18 anos atrás)

... disse:
desculpa mas eu escrevi o artigo para ajudar que não sabe ou nao possui, xml, mysql e etc. se você quer dizer que este metódo é ultrapassado, ou que xml é melhor, ou que você faria melhor, escreva seu próprio artigo e ensine a quem quer usar XML.

não estou te chamando de burro, mas estou dizendo que usar xml_parse, e todo o tipo de coisas para manusear mysql é muito mais complicado do que utilizar FLAT.

mas caso você queira, boa sorte, eu até aconselho. mas este artigo foi feito para quem não quer, ou não sabe usar xml, portanto, se você não se encaixa neste grupo, por favor poupe suas palavras.

Andreas
28/08/2003 5:05pm (~18 anos atrás)

Falou professor. Qual será a sua próxima aula?
28/08/2003 5:01pm (~18 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)