segunda-feira, 29 de outubro de 2012

PHP: Manipulação de Arquivos


1. Abrindo um Arquivo

Esse tutorial irá ensinar como manipular arquivos, utilizando o PHP. A primeira coisa que deve ser feita quando for manipular um arquivo é abrí-lo. Para abrir utiliza-se a função fopen() para abrir. O protótipo da função é a seguinte:

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

onde:
  • $filename: Nome do arquivo a ser aberto;
  • $mode: é o modo de acesso do arquivo;
  • $ use_include_path (opcional): indica se o arquivo deve ser procurado nos diretórios especificados no include_path do php.ini ;
  • $context (opcional): permite a definição de um contexto, que é um conjunto de parâmetros que modificam o comportamento do arquivo.



Os parâmetros opcionais não será visto, mas precisamos entender os dois obrigatórios. Vamos testar a abertura de um arquivo, em um arquivo PHP, vamos colocar o seguinte comando:

$arq = fopen("arquivo.txt","w");

lembrando que você deve ter permissão no diretório que especificou no $filename para mexer com arquivos. No caso desse exemplo, vai ser criado um arquivo chamado arquivo.txt no mesmo local em que o script php está (pode visualizar a pasta em que você salvou o script), e uma referência para este arquivo está sendo guardada na variável $arq. Essa referência, vamos estar utilizando para as outras funções para manipular esse arquivo.
O “w” que foi passado para a função indica que você quer escrever no arquivo. As outras formas que você pode estar utilizando no modo são:

ModoDescrição
rAbre o arquivo para somente leitura. O ponteiro de indicação é colocado no início do arquivo.
r+Abre o arquivo para leitura e escrita. O ponteiro de indicação é colocado no início do arquivo.
wCria um novo arquivo, permitindo somente escrita. Caso o arquivo já exista, sobrescreve o antigo.
w+Cria um novo arquivo, permitindo a leitura e a escrita do mesmo. Caso o arquivo já exista, sobrescreve o antigo.
aAbre um arquivo com permissão somente para escrita. O ponteiro de indicação é colocado no final do arquivo. Caso o arquivo não exista, ele tenta criá-lo.
a+Abre um arquivo com permissão para escrita e leitura. O ponteiro de indicação é colocado no final do arquivo. Caso o arquivo não exista, ele tenta criá-lo.
xCria um arquivo para escrita somente. Se o arquivo já existe, a função fopen falhará e retornará um erro. Se o arquivo não existe, tenta criá-lo.
x+Cria um arquivo para escrita e leitura. Se o arquivo já existe, a função fopen falhará e retornará um erro. Se o arquivo não existe, tenta criá-lo.


Aqui é falado em alguns sobre o ponteiro de indicação. Esse ponteiro de indicação mostra em que parte do arquivo você está mexendo. Para entender melhor, imagine um documento do Word aberto com um texto grande. No meio desse texto, possui um cursor piscando e conforme você digita, é a partir desse cursor que o texto vai aparecendo. Esse cursor que fica piscando é o ponteiro de indicação.

Opcionalmente, podemos adicionar depois do modo, a letra “b” para indicar se o arquivo que vamos manipular é binário ou texto (por exemplo, “w+b” para criar um novo arquivo binário e poder ler).
Um arquivo binário contém dados na linguagem do computador e geralmente são mais rápido a leitura, porém não é possível a leitura direta do conteúdo. Exemplos de arquivo binário são as imagens, a maioria dos programas executáveis, músicas entre outros. Já um arquivo do tipo texto são arquivos que podem ser abertos com qualquer editor de texto (Bloco de Notas, por exemplo) que você poderá ver o seu conteúdo.

2. Fechando um Arquivo

Quando um arquivo é aberto, geralmente ele fica bloqueado para alterações por outros meios que não seja o aplicativo que o abriu. Caso o aplicativo que abriu um arquivo, não feche o mesmo, o arquivo pode ficar bloqueado por tempo indeterminado. Por isso a importancia de sempre fechar o arquivo. Para fechar o arquivo, usamos a função fclose(). Vamos inserir o comando abaixo logo após ao fopen():

fclose($arq);

Esse é o comando que fecha o arquivo. Uma vez fechado o arquivo, não poderemos mais mexer no mesmo, a não ser que utilizemos novamente a função fopen(). Ou seja, a função fopen() será sempre a primeira função a ser chamada numa manipulação de arquivo, enquanto o fclose() será sempre a última.

3. Escrevendo no Arquivo
Para escrever no arquivo, a primeira coisa que precisamos é preparar o conteúdo que será guardado no arquivo. Isso é algo que varia conforme o processamento necessário para isso. Por exemplo, quero guardar no arquivo a frase “Escrevi nesse arquivo”. Então, entre o fopen e o fclose, nós teríamos os seguintes códigos:

$conteudo = "Escrevi nesse arquivo";
fwrite($arq,$conteudo);

Aqui a variável $conteudo vai estar guardando a nossa frase, e a função fwrite() é a função responsável em escrever no arquivo. Execute o código e verifique o arquivo que foi gerado. Vai aparecer o texto que salvamos nele.

Em caso de arquivo texto, caso queira que o texto apareça na linha de baixo, deve-se utilizar um caracter de escape, que no caso dependerá do interpretador, sendo:

    \n: para Sistemas Linux;
    \r\n: para Sistemas Windows;
    \r: para Mac

Por exemplo, se quero escrever a mesma frase acima, mas a palavra “arquivo” fique na linha de baixo, em um ambiente Widows, o código ficaria assim:

$conteudo = "Escrevi nesse\r\narquivo";


4. Lendo o Arquivo
Agora que temos um arquivo com algum conteúdo, podemos ler esse arquivo. Entretanto, o nosso código que fizemos até agora, ao abrir o arquivo, nós pedimos apenas permissão para escrever o arquivo, e não ler. Então, após o fclose() vamos reabrir o arquivo, mas agora com o modo de leitura ativada, que vai ficar da seguinte maneira:

$arq2 = fopen("arquivo.txt","r");

Isso dará permissão para leitura, além de colocar o ponteiro indicador no início do arquivo, deixando nós pronto para ler a partir desse ponteiro. A função fread() é a responsável para a leitura de arquivos, então insira o código o seguinte:

$dadosArq = fread($arq,1024);
echo $dadosArq;
fclose($arq2);

A função fread() possui dois parâmetros, o primeiro é o ponteiro do arquivo que queremos ler, enquanto o segundo parâmetro é a quantidade de dados que queremos ler em Bytes, neste caso, 1KB de dados. Caso ele chegue no final do arquivo antes dos 1024 bytes, ele retornará o que conseguiu. Se ainda tiver dados após esses 1024 bytes, outro comando fread() deve ser chamado para ler os dados restantes.

5. Dicas
  • Sempre faça a validação para se certificar que o arquivo foi realmente aberto. Exemplo:

$arq = fopen($arquivo,$modo);
if(!$arq){
    echo "Não foi possível abrir o arquivo";
}
  • O primeiro comando sempre será a função fopen() e o último comando será fclose();


6. Resumo
  • $arq = fopen($arquivo,$modo): Abre um arquivo localizado em $arquivo, com o modo $modo (leitura/gravação);
  • fclose($arq): Fecha o arquivo referenciado pelo $arq;
  • fwrite($arq, $dados): Grava os dados de $dados no arquivo $arq;
  • $dados = fread($arq,$tam): Lê do arquivo $arq, $tam bytes de dados e armazena-os em $dados.

Nenhum comentário:

Postar um comentário