TheSubKIller aka Skinning 261 Posted April 9, 2012 Boas Cyber-Gamers 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. 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. Share this post Link to post Share on other sites