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.
Funções para txt
Vamos abordar as seguintes funções:
- fopen() - abre um arquivo
- fwrite() - escreve em um arquivo
- fclose() - fecha um arquivo
- http://www.php.net/manual/pt_BR/function.fopen.php
- http://www.php.net/manual/pt_BR/function.fwrite.php
- http://www.php.net/manual/pt_BR/function.fclose.php
<?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);
?>
// 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.
Funções extra:
- explode() - divide uma string.
- opendir() - abre um diretorio.
- readdir() - lê os arquivos de um diretório.
- closedir() - fecha um diretório.
- file_exists() - verifica se um arquivo existe.
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>
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";
}
}
?>
// 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);
?>
// 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!