Arquivos Texto no PHP

 

Existem diversos motivos para manipularmos arquivos no formato texto dentro do PHP, um dos principais motivos ao meu ver, seria em alguns casos a substituição do uso de um SGBD por arquivos texto, pois isso nos fornece a vantagem de maior rapidez ao armazenamento e recuperação desses dados. Claro que devemos optar por essa substituição somente quando temos pouco volume de dados e a segurança não seja uma prioridade.

Entre outras situações em que podemos fazer o uso da manipulação de arquivos, podemos destacar: atualização de conteúdo do site, contadores de acesso, livro de visitas etc... 

As  principais operações que podem ser realizadas sobre um arquivo são abertura, leitura, escrita e fechamento, vamos conhecer então mais abaixo cada uma das funções que permitem realizarmos essas tarefas.


 

Abertura de Arquivos - fopen

 

Para abrirmos um determinado arquivo, fazemos o uso da função fopen:

Sintaxe: 

 

resource fopen ( string $filename , string $mode [, bool $use_include_path [, resource $context ]] )

ou seja,

recurso fopen ( string nome_do_arquivo, string modo[, int usar_include_path [, recurso contexto]] )

 

nome_do_arquivo: Este arquivo pode estar no mesmo computador ou em algum computador remoto. Esse parâmetro pode também iniciar como http:// ou ftp://, será aberta uma conexão http ou ftp antes da abertura do arquivo, neste caso o arquivo será aberto do filesystem da própria máquina e será retornado um ponteiro para este arquivo. Na plataforma Windows, tenha cuidado de escapar qualquer barra invertida usada no caminho do arquivo, ou use barras normais.

Exemplo:

 

<?php
$handle = fopen("c:\\data\\info.txt", "r");
?>

 

modo:  Esse parâmetro especifica o tipo de acesso que você precisa e pode ter um dos seguintes valores:

 ( fonte da imagem: http://php.net/manual/pt_BR/function.fopen.php )

 

usar_include_path e contexto: Não entraremos em detalhes quanto a estes parâmetros, pois não utilizaremos nos exemplos a seguir. Se você desejar maiores informações acesse o link: http://php.net/manual/pt_BR/function.fopen.php

 

Mais exemplos: 

 

<?php
$ponteiro = fopen ("http://www.concatenar.com.br", "r");
$ponteiro = fopen ("c:\\arquivo\\teste1.txt", "r");
?>

 

Fechamento de Arquivos - fclose

 

Para fechar um arquivo, fazemos uso da função fclose.

Sintaxe:

 

bool fclose ( resource $handle )
ou seja,
bool fclose ( recurso ponteiro_arquivo)

 

A função tem como objetivo retornar true se o arquivo foi fechado corretamente e false se ocorreu alguma falha. O parâmetro que foi passado para a função fclose tem que conter a variável na qual foi atribuído o resultado da função fopen. Exemplo:

 

<?php 
$ponteiro = fopen ("teste.txt", "r");
...
fclose ($ponteiro);
?>

 


 

Leitura de Arquivos 

 

Existem diversas funções que o PHP nos fornece para realizar a leitura de dados armazenados em um arquivo. Cada uma possui características diferentes, cabe a você escolher a que melhor se encaixa para o propósito desejado. Segue abaixo algumas dessas funções:

 


 

fread

Essa função nos permite ler dados de um arquivo especificando a quantidade de informações a serem lidas. 

Sintaxe: 

 

string fread ( resource $handle , int $length )
ou seja
string fread (recurso ponteiro_do_arquivo, int tamanho )

 

Lê o número de bytes informado no parâmetro tamanho a partir da posição atual do ponteiro definido pelo primeiro parâmetro ponteiro_do_arquivo

 

Vamos testar essa e as demais funções apresentadas, para isso crie um arquivo de texto chamado teste.txt dentro da pasta onde você irá criar os programas em PHP.

Exemplo, se você usa um servidor local como Wampserver, Acesse C:\wamp\www dentro crie uma pasta chamada arquivos e dentro dela crie então o arquivo de texto chamado teste.txt com o seguinte conteúdo:

 

<b>Dialética</b><br><br>  

É claro que a vida é boa<br> 

E a alegria, a única indizível emoção<br>  

É claro que te acho linda<br>  

Em ti bendigo o amor das coisas simples<br>  

É claro que te amo<br>  

E tenho tudo para ser feliz<br>  

Mas acontece que eu sou triste...<br><br>  

Vinicius de Moraes

 

Se você estiver utilizando um servidor de hospedagem faça o mesmo, acesse a pasta www ou public_html crie uma nova pasta chamada arquivos e salve o arquivo teste.txt com o conteúdo mostrado acima.

Para testar os programas, pra quem está utilizando servidor local (wampserver) basta acessar localhost a pasta arquivos e em seguida o programa criado.

Se você tem dúvidas quanto a servidor local, como instalar e fazer uso, clique aqui e conheça nossos artigos a respeito.

Caso esteja usando servidor de hospedagem, acesse como em nosso caso http://www.concatenar.com.br/arquivos/ e o programa desejado. No seu caso basta mudar www.seudominio.com.br/arquivos/

 

Voltando ao exemplo da função fread, criado o arquivo .txt basta criar o seguinte programa em php:

 

 

Como resultado obtemos:

 

 

Note que apenas uma parte do texto do arquivo é apresentado, ou seja, somente a quantidade de bytes informados dentro do parâmetro tamanho. 


 

fgets 

Outra forma de realizar a leitura de um arquivo é usando a função fgets, a sua diferença é que lê no máximo uma linha inteira. Seu uso é recomendado quando se é necessário trabalhar com cada linha do arquivo individualmente.

Sintaxe:

 

string fgets ( resource $handle [, int $length ] )
ou seja,
string fgets ( recurso ponteiro_do_arquivo [, int tamanho ])

 

Da mesma forma que o exemplo anterior, a leitura é realizada até que seja lido o tamanho de bytes especificado no parâmetro tamanho, ou quando terminar a linha atual do arquivo. Se o tamanho não for especificado, será utilizado o valor padrão que é 1024 bytes.

Para testar essa função crie o seguinte programa: 

 

Como resultado encontramos somente o título do texto contido no arquivo:

 

Note que colocamos 2000 no tamanho, mesmo com essa quantidade de bytes, não é exibida as demais linhas do texto. Caso você substitua esse valor por 9, note que a palavra ficará pela metade.


 

fgetss

Essa função realiza a leitura de uma linha do arquivo e retira as tags HTML ou PHP existentes no conteúdo lido. Note que as tags são eliminadas no momento da leitura, isso você só conseguirá perceber exibindo o código fonte da página HTML.

Sintaxe:

 

string fgetss ( resource $handle [, int $length [, string $allowable_tags ]] ) 
ou seja,
string fgetss ( recurso ponteiro_do_arquivo [, int tamanho [, string tags_permitidas ]] )

 

Se o conteúdo lido for <b>Dialética</b> e ele for exibido usando o comando echo, será mostrado somente a palavra Dialética em negrito. Caso você use o comando fgetss eliminamos as tags no momento da leitura, isso você só percebe exibindo o código fonte da página, mas poderá também perceber que o conteúdo já não é mais exibido em negrito.

A diferença na sintaxe é que faz a leitura da linha, de acordo com a quantidade de bytes especificado no parâmetro tamanho a partir da posição ponteiro_do_arquivo, e você também pode especificar as tags permitidas na leitura, através do parâmetro tags_permitidas.

Para testar essa função crie o seguinte programa:

 

Resultado obtido no Navegador (Note que não está mais em negrito) : 

 

Comparando o código fonte da página antes como comando fgets e depois com o comando fgetss:

 

 


 

fgetc

Essa função lê um caractere por vez.

Sintaxe: 

 

string fgetc ( resource $handle )
ou 
string fgetc ( recurso ponteiro_do_arquivo )

 

Estando o ponteiro no fim do arquivo e sem mais caracteres para leitura, essa função retorna False.

Crie o seguinte arquivo para testar a função:

 

 

Se você tiver dificuldades para entender comandos condicionais (loops) ou operadores, recomendo a leitura do seguinte artigo http://www.concatenar.com.br/php/php-nocoes-necessarias.html

Resultado do programa acima no navegador:

 


 

Armazenando todo o conteúdo de um arquivo em uma string

 

Com apenas uma simples função é possível armazenar todo o conteúdo de um arquivo em uma variável do tipo string, para isso utilizamos a função file_get_contents que possuí a seguinte sintaxe:

 

string file_get_contents ( string $filename [, int $flags [, resource $context [, int $offset [, int $maxlen ]]]] )
ou
string file_get_contents (string nome_do_arquivo [, int flags [, recurso contexto [, int inicio_leitura [, int comprimento_maximo ]]] ) 

 

Como vamos ler todo o arquivo, basta saber que vamos utilizar somente o parâmetro nome_do_arquivo, caso queira maiores informações sobre os demais parâmetros dessa função acesse: http://www.php.net/manual/pt_BR/function.file-get-contents.php

Para testar a função crie o arquivo abaixo:

 

Resultado:

 

 


 

Exibindo o conteúdo diretamente na tela

 

O PHP ainda nos fornece uma outra função que capta todo o conteúdo de um arquivo e o envia diretamente para o buffer de saída. Essa função chama-se readfile, segue abaixo sua sintaxe:

 

int readfile ( string $nomedoarquivo [, bool $use_include_path [, resource $context ]] )
ou 
int readfile ( string nome_do_arquivo [, bool usar_include_path [, recurso contexto ]] ) 

 

Vamos utilizar como parâmetro somente o nome_do_arquivo, para maiores informações sobre parâmetros e como funcionam dentro desta função acesse: http://www.php.net/manual/pt_BR/function.readfile.php

Para testar a função crie o seguinte programa:

 

Resultado obtido:

 

 


 

Armazenando todo o conteúdo de um arquivo em um Array

 

Podemos usar um array ao invés de uma string e armazenar todo o conteúdo do arquivo. Cada elemento do array que vamos criar irá conter uma linha do arquivo. Para isso vamos utilizar a função file.

Sintaxe:

 

array file ( string $filename [, int $flags = 0 [, resource $context ]] )
ou 
array file ( string nome_do_arquivo [, int flags = 0 [, recurso contexto ]] )

 

Como nos exemplos anteriores, vamos utilizar somente o parâmetro nome_do_arquivo, para maiores informações, acesse: http://php.net/manual/en/function.file.php

 

Para testar a função crie o seguinte programa:

 

 

Esse programa é bem simples, abre o arquivo teste.txt, armazena o seu conteúdo no $array. Onde cada elemento do array será uma linha do arquivo, linha 1 = array[0], linha 2 = array [1] e assim por diante. Usamos em seguida um loop através do comando foreach para percorrer todos os elementos do array e imprimi-los na tela usando o comando echo.

Resultado:

 


 

Escrita

 

Para realizar a escrita dentro de um arquivo de texto com o PHP, usamos a função fwrite que possuí a seguinte sintaxe: 

 

int fwrite ( resource $handle , string $string [, int $length ] )
ou 
int fwrite ( recurso ponteiro_do_arquivo, string string [, int tamanho ] )

 

Essa função funciona da seguinte forma: Escreve o conteúdo do parâmetro string no arquivo referenciado pelo parâmetro ponteiro_do_arquivo. O parâmetro tamanho é opcional. Se informarmos esse tamanho, a escrita para ao atingir a quantidade de bytes informado.

 

Vamos testar a função, para isso crie o seguinte arquivo:

 

Esse programa é muito simples, ele abre o arquivo teste.txt no modo escrita, eliminando o seu conteúdo (Poema de Vinicius de Moraes) e posicionando o ponteiro no início do arquivo. Em seguida usa a função fwrite e realiza a escrita, com o valor da variável $conteúdo no arquivo. Fecha-se o arquivo com a função fclose. E por fim uso a função readfile para verificar o resultado. 

Resultado apresentado:

 


 

Escrita no fim do arquivo (Alteração)

 

Vamos utilizar a mesma função (fwrite) para escrever no arquivo, a unica diferença é que o conteúdo do arquivo não será apagado, simplesmente vamos alterar o arquivo a partir da última linha. Basta alterar o parâmetro modo, dentro da função fopen() de acordo com a tabela apresentada no início deste artigo (Como você irá notar utilizaremos no parâmetro modo "a+" que abre o arquivo para leitura e escrita, colocando o ponteiro no final do arquivo).

Crie e execute o seguinte programa:

 

Resultado:

 


 

Paramos por aqui, espero que o artigo possa lhe ajudar a sanar suas dúvidas, caso tenha dificuldades em entender o conteúdo apresentado, acesse a área sobre PHP do nosso site e faça uma revisão dos artigos sobre Noções Básicas e Necessárias: http://www.concatenar.com.br/php

Em breve mais dicas...

 


Fontes:

http://www.php.net/manual/pt_BR/

http://php.net/manual/pt_BR/function.fopen.php

...