|
Os ficheiros permitem-nos
armazenar facilmente pequenos pedaços
de informação. O método
de utilização é idêntico
ao utilizado em C, o que é bastante
simples. Vou apenas fazer uma abordagem
aos ficheiros, visto que é muito
mais simples utilizar uma base de dados
(como o MySQL) para armazenar informação
do que com os ficheiros. Em todo o caso,
para os que não tem disponível
uma base de dados para trabalhar, ou pretendem
apenas armazenar pouca informação,
a utilização de ficheiros
pode ser o suficiente.
Criar um ficheiro, implica
guardar informação no servidor.
Logo, para que tal aconteça, a directoria
onde vamos guardar o ficheiro, deve ter
permissões de leitura e escrita (muito
importante!). Em Linux, por default, quando
criamos uma directoria, ela fica apenas
com permissão de escrita para o utilizador.
Frequentemente existem problemas de permissões,
porque os scripts PHP (com o user id do
webserver) não estão autorizados
a escrever nesses locais. Uma maneira simples
de resolver o problema é dar modo
de leitura/escrita para todos: chmod a+wr
directoria (para uma solução
mais
personalizada, consultar o manual do chmod).
Supondo que o problema das
permissões está resolvido,
vamos ver como podemos armazenar informação
num ficheiro:
<?
$str="Isto
é um teste";
$ficheiro=fopen("teste.txt","w");
fputs($ficheiro, $str);
fclose($ficheiro);
?>
Basicamente, o que este script
faz, é abrir um ficheiro de nome
"teste.txt" e armazena lá
dentro a string $str. Para tal, inicialmente
utilizamos o fopen para abrir um ponteiro
de escrita ("w") para o ficheiro
"teste.txt", que fica armazenado
em $ficheiro. Este ponteiro server para
podermos trabalhar com o conteúdo
do ficheiro, ou seja, podemos escrever no
ponteiro, e esta operação
terá efeito no ficheiro em si. Para
escrever no ficheiro utilizamos a função
fputs (File PUT String). No fim fechamos
o ponteiro do ficheiro, e termina o script.
Quando esta operação acontece,
conteúdo do ficheiro é gravado.
Por default, o PHP fecha todos os ponteiros
de ficheiro no fim no fim do script, mas
é bom habito sermos nós a
fechar.
Podemos agora fazer a leitura da string
que colocamos anteriormente:
<?
$ficheiro=fopen("teste.txt","r");
$str=fgets($ficheiro,100);
fclose($ficheiro);
echo
$str;
?>
Mais uma vez, abrimos um
ponteiro $ficheiro, desta vez de leitura
("r"), para o ficheiro"teste.txt".
Seguidamente, utilizamos a função
fgets (File GET String) para ler o conteúdo
(neste caso indicamos para ler 100 bytes)
do
$ficheiro. Depois fechamos o ponteiro, e
escrevemos a string no fim.
-*-
Modos de abertura de um ficheiro,
permitido pelo fopen:
'r' - Abre o ficheiro apenas
para leitura. Posiciona o ponteiro no inicio
do ficheiro.
'r+' - Abre o ficheiro para
leitura e escrita. Posiciona o ponteiro
no inicio do ficheiro.
'w' - Abre o ficheiro apenas
para escrita. Posiciona o ponteiro no inicio
do ficheiro, e trunca o seu tamanho para
0. Se o ficheiro não existe, tenta
cria-lo.
'w+' - Abre o ficheiro para
leitura/escrita. Posiciona o ponteiro no
inicio do ficheiro, e trunca o seu tamanho
para 0. Se o ficheiro não existe,
tenta cria-lo.
'a' - Abre o ficheiro apenas
para escrita. Posiciona o ponteiro no fim
do ficheiro. Se o ficheiro não existe,
tenta cria-lo.
'a+' - Abre o ficheiro para
leitura/escrita. Posiciona o ponteiro no
fim do ficheiro. Se o ficheiro não
existe, tenta cria-lo.
-*-
Existe muitas funções
que nos ajudam a trabalhar sobre ficheiros.
Algumas dessas são usadas muito frequentemente,
para verificar se o ficheiro existe, antes
de o tentarmos ler, ou então para
nos indicar se, quando estamos a ler informação
de um ficheiro, já chegamos ou não
ao fim do ficheiro. Vou dar uma pequena
lista e explicar ligeiramente algumas delas.
A lista completa das funções
de ficheiros que podemos utilizar, está
disponível no manual em:
http://www.cidadela.org/php/manual/ref.filesystem.html
Pequena lista de funções que
são frequentes de utilizar em ficheiros:
fopen - Abre um ficheiro,
e devolve um ponteiro para este, para que
se possa executar operações
relacionadas com o ficheiro em causa.
fclose - Fecha o ficheiro
(guarda a informação modificada)
e destroi o ponteiro de referência.
Após um fclose de um ponteiro, só
podemos voltar a aceder a informação
do ficheiro, voltando a abri-lo com o fopen.
fgets - Le um determinado
numero de bytes de um ficheiro.
fputs - Escreve informação
num ficheiro.
file_exists - Verifica se
um ficheiro existe. É recomendado
fazer esta verificação para
não tentar-mos abrir (para leitura)
um ficheiro que não existe originando
assim a um erro, por parte do PHP.
feof - Verifica se o ponteiro
se encontra no fim do ficheiro. Útil
para quando temos um ciclo while para ler
a informação de um ficheiro.
A lógica normalmente utilizada é:
"Enquanto não estamos no fim
do ficheiro, lê
informação." while (!feof($ficheiro))
{...}
Estas funções já nos
permitem fazer pequenos scripts que armazenem
informação num ficheiro.
Vamos então utilizar
algumas funções e construir
um contador, para nos dizer quantas vezes
uma página foi vista:
<?
//verificar
existência do contador
if (file_exists("contador.txt"))
{
//ficheiro existe, vamos abrir para leitura
$ficheiro=fopen("contador.txt","r");
//Já temos o ponteiro, retiramos
o numero de visitas:
$visitas=fgets($ficheiro,100);
//incrementamos uma visita ao total de visitas
$visitas++;
//fechamos o ponteiro de leitura do ficheiro
fclose($ficheiro);
}
else
{
//caso não exista ficheiro, esta
é a primeira visita
$visitas=1;
}
//agora actualizamos/criamos o ficheiro
para o numero das visitas
$ficheiro=fopen("contador.txt","w");
//escrevemos
o total das visitas
fputs($ficheiro,$visitas);
//e
fechamos o ficheiro
fclose($ficheiro);
echo
"Número de visualizações
da página: $visitas";
?>
Este é um exemplo
simples de como se pode ler e escrever num
ficheiro. Primeiro verificamos se o ficheiro
já existe, e se sim, lê-mos
o numero de visitas. Actualizamos o numero,
e escrevemos no ficheiro. Se o ficheiro
não
existe, é porque é a primeira
visita, e escrevemos o numero 1 no ficheiro.
No fim mostramos o numero de visitas que
a página teve.
Exercício 9.1:
Vamos construir a nossa lista
de compras! Para tal, utiliza o seguinte
formulário, para adicionares o produto:
<html>
<body>
<form
action=adiciona.php>
Produto a comprar: <input type=text name=produto><br>
<input type=submit value=Adicionar>
</form>
</body>
</html>
Deves criar um script PHP
de nome "adiciona.php" que adiciona
ao ficheiro o produto que pretendemos.
AVISO!!!! Para que exista
um produto por linha, deve ser concatenado
ao nome do produto, os caracteres "\n"
. Estes caracteres indicam o fim de linha,
logo quando estamos a escrever no ficheiro,
mandamos o nome do produto e o
caracter de fim de linha, para que o ponteiro
passe para a linha seguinte do ficheiro.
Deves escolher com cuidado o tipo de abertura
do ficheiro que pretendes fazer.
Após a introdução
do produto no ficheiro, deverá aparecer
uma mensagem a dizer qual o produto que
foi adicionado à lista de compras.
Exercício 9.2:
Após o produto ser adicionado, o
script "adiciona.php" deve de
mostrar a lista completa dos produtos que
se prende comprar, um por linha, e devidamente
numerados.
Exercício 9.3 (dificuldade elevada!):
Para evitar adicionar produtos que já
estavam na lista de compras, devemos poder
consultar a lista, antes de introduzirmos
um novo produto. Para tal, cria um novo
script independente. Este deverá
ser chamado de "compras.php"
e deve respeitar os seguintes critérios:
Se não existe lista
de compras, escreve uma mensagem a dizer
"Não existem compras a fazer",
e mostra o formulário para se adicionar
um novo produto.
Se a lista de compras existe,
escreve os produtos (numerados) já
adicionados, que pretendemos comprar, seguido
do formulário para se adicionar um
novo produto.
O formulário faz a
submissão para o próprio "compras.php",
e deve adicionar um produto a lista de compras,
sempre que se este seja introduzido.
NOTA:
Relembro que APÓS se faz um submit,
o PHP cria uma variável com o nome
da caixa de texto (neste caso $produto)
com o conteúdo introduzido pelo utilizador.
Para verificares se essa variável
existe ou não, deves utilizar a função
"isset()" q devolve VERDADEIRO,
caso a variável tenha sido declarada,
ou FALSO, caso não tenha.
Resumo:
Podemos utilizar ficheiros para guardar
pequenas informações, sempre
que não possamos ter acesso a uma
base de dados. Trabalhamos nos ficheiros
através de ponteiros, que vão
indicando a posição do ficheiro
onde nos encontramos.
E temos diversas funções que
nos permitem trabalhar com estes.
|