0
Mas para que eu iria querer manipular meus arquivos via PHP? - Nós podemos usar a manipulação de arquivos para várias coisas como: Fazer um gerenciador de arquivos remoto, editar um arquivo .css remotamente em um sistema gerenciador de conteúdo qualquer, salvar informações de acesso em um arquivo de log, criar um contador para seu site e até mesmo substituir um programa SGBD (Sitema Gerenciador de Banco de Dados) em tarefas corriqueiras em que sejam manipulados dados simples, etc. Recentemente utilizei bastante essas funções na construção do framework PHP Coupé
As funções que utilizaremos em todo tutorial são:
  • fopen() - 'Abre' o arquivo para que possa ser manipulado.
  • fgets() - Pega uma linha do arquivo até o máximo de 1024bytes.
  • feof() - Durante a leitura de um arquivo, avisa se chegou ao final.
  • ftruncate() - Reduz o tamanho do arquivo. Usado para apagar seu conteúdo.
Com esta função podemos criar qualquer arquivo novo. Sua sintaxe é a seguinte:
fopen ($nomedoarquivo, $modo);

  • $nomedoarquivo - O nome do arquivo pode conter o caminho absoluto onde você deseja criar o seu arquivo. Exemplo, 'www/programa/arquivo.txt'.
  • $modo - O modo indica as permissões de acesso para o arquivo que foi criado. Por exemplo, ele pode ser criado apenas para leitura (consulta de dados) ou para escrita e leitura.
ModoDescrição
'w'Abre o arquivo para apenas escrita; coloca o ponteiro do arquivo no começo do arquivo e diminui (trunca) o tamanho do arquivo para zero. Se o arquivo não existe, tenta criá-lo.
'w+'Abre o arquivo para leitura e escrita; coloca o ponteiro do arquivo no começo e diminui (trunca) o tamanho do arquivo para zero. Se o arquivo não existe, tenta criá-lo.
'r'Abre o arquivo somente para leitura; coloca o ponteiro de escrita no começo do arquivo. [Retorna um erro caso o arquivo não exista e não tenta cria-lo.]
'r+'Abre para leitura e escrita; coloca o ponteiro de escrita no começo do arquivo. [Retorna um erro caso o arquivo não exista e não tenta cria-lo.]
'a'Abre para somente para escrita somente; coloca o ponteiro do arquivo no final. Se o arquivo não existir, tenta criá-lo.
'a+'Abre o arquivo para leitura e escrita; coloca o ponteiro do arquivo no final. Se o arquivo não existir, tenta criá-lo.
'x'Cria e abre o arquivo para escrita somente; coloca o ponteiro no início do arquivo. Se o arquivo já existe, a chamada a fopen() irá falhar, retornando FALSE, gerando um erro nível E_WARNING. Se o arquivo não existe, tenta criá-lo. Esta opção é suportada no PHP 4.3.2 e posteriores, e somente funciona em arquivos locais.
'x+'Cria e abre um arquivo para escrita e leitura; coloca o ponteiro do arquivo no início. Se o arquivo já existe, a chamada a fopen() irá falhar, retornando FALSE, gerando um erro nível E_WARNING. Se o arquivo não existe, tenta criá-lo. Esta opção é suportada no PHP 4.3.2 e posteriores, e somente funciona em arquivos locais.
<?php
$arquivo = fopen('meuarquivo.txt','w');
if ($arquivo == false) die('Não foi possível criar o arquivo.');
?>
Tenha cuidado pois o modo 'w' coloca o ponteiro de escrita no início do arquivo. Se o arquivo já existir, ele deletará todo o conteúdo.
Se a função funcionar ele retorna o ponteiro do arquivo. Mas se a função falhar por qualquer motivo, a função retorna false.
<?php
$arquivo = fopen('meuarquivo.txt','w+');
if ($arquivo == false) die('Não foi possível criar o arquivo.');
?>
O modo 'w+' coloca o ponteiro no início do arquivo. Se o arquivo já existir, ele deletará todo o conteúdo.
<?php
$arquivo = fopen('meuarquivo.txt','r');
if ($arquivo == false) die('O arquivo não existe.');
?>
<?php
$arquivo = fopen('meuarquivo.txt','a');
if ($arquivo == false) die('Não foi possível criar o arquivo.');
?>
fgets($ponteiro, $tamanho);

  • $ponteiro - O ponteiro aqui utilizado, está armazenado na variável que você usou para abrir ou criar o arquivo.
  • $tamanho - Como já foi dito, é o tamanho em número de bytes que deve ser lida a linha do arquivo. Se não for especificado, o programa irá ler até o final da linha (até um número máximo de 1024 caracteres).
<?php
$arquivo = fopen('meuarquivo.txt','r');
if ($arquivo == false) die('Não foi possível abrir o arquivo.');
$linha = fgets($arquivo);
echo $linha;
fclose($arquivo);
?>
<?php
$arquivo = fopen('meuarquivo.txt','r');
if ($arquivo == false) die('Não foi possível abrir o arquivo.');
$linha = fgets($arquivo, 64);
echo $linha;
fclose($arquivo);
?>
<?php
$arquivo = fopen('meuarquivo.txt','r');
if ($arquivo == false) die('Não foi possível abrir o arquivo.');
while(true) {
$linha = fgets($arquivo);
if ($linha==null) break;
echo $linha;
}
fclose($arquivo);
?>
<?php
$arquivo = fopen('meuarquivo.txt','r');
if ($arquivo == false) die('Não foi possível abrir o arquivo.');
// imprime linha por linha ate detectar o final
while(!feof($arquivo)) {
echo fgets($arquivo). '<br />';
}
fclose($arquivo);
?>
<?php
$arquivo = fopen('meuarquivo.txt','r');
$string = file_get_contents('meuarquivo.txt');
echo $string;
fclose($arquivo);
?>
fwrite($ponteiro, $string, $tamanho);

  • $ponteiro - O ponteiro aqui utilizado, está armazenado na variável que você usou para abrir ou criar o arquivo.
  • $string - O conteúdo textual que você deseja escrever em seu arquivo.
  • $tamanho - É o tamanho em número de bytes que deve ser gravado no arquivo. Opcional.
<?php
$arquivo = fopen('meuarquivo.txt','w+');
if ($arquivo) {
if (!fwrite($arquivo, 'Novo conteúdo')) die('Não foi possível atualizar o arquivo.');
echo 'Arquivo atualizado com sucesso';
fclose($arquivo);
}
?>
<?php
// abre o arquivo colocando o ponteiro de escrita no final
$arquivo = fopen('meuarquivo.txt','a+');
if ($arquivo) {
// move o ponteiro para o inicio do arquivo
rewind($arquivo);
if (!fwrite($arquivo, 'Novo conteúdo')) die('Não foi possível atualizar o arquivo.');
echo 'Arquivo atualizado com sucesso';
fclose($arquivo);
}
?>
<?php
// abre o arquivo colocando o ponteiro de escrita no final
$arquivo = fopen('meuarquivo.txt','r+');
if ($arquivo) {
if (!fwrite($arquivo, 'Novo conteúdo')) die('Não foi possível atualizar o arquivo.');
echo 'Arquivo atualizado com sucesso';
fclose($arquivo);
}
?>
<?php
// abre o arquivo colocando o ponteiro de escrita no final
$arquivo = fopen('meuarquivo.txt','r+');
if ($arquivo) {
while(true) {
$linha = fgets($arquivo);
if ($linha==null) break;
// busca na linha atual o conteudo que vai ser alterado
if(preg_match("/José da Silva:/", $linha)) {
$string .= str_replace("José da Silva: 27 anos", "José da Silva: 28 anos", $linha);
} else {
// vai colocando tudo numa nova string
$string.= $linha;
}
}
// move o ponteiro para o inicio pois o ftruncate() nao fara isso
rewind($arquivo);
// truca o arquivo apagando tudo dentro dele
ftruncate($arquivo, 0);
// reescreve o conteudo dentro do arquivo
if (!fwrite($arquivo, $string)) die('Não foi possível atualizar o arquivo.');
echo 'Arquivo atualizado com sucesso';
fclose($arquivo);
}
?>

1 - Criando os arquivos
Para começar, vamos primeiro criar o nosso arquivo. Para isso existe a função fopen().
Como podemos ver, a função fopen possui dois argumentos: O nome do arquivo e o modo que esse arquivo será criado.
Segue abaixo a tabela com os modos de arquivos retirados da documentação oficial do PHP.
Vamos a alguns exemplos práticos:
Exemplo- criar um novo arquivo para escrita
O código acima cria um novo arquivo (para escrita somente) no diretório corrente do arquivo PHP executado.
Exemplo - criar um novo arquivo para leitura e escrita
Como no exemplo 1, o código acima cria um novo tanto para leitura como para escrita no diretório corrente do arquivo PHP executado.
Exemplo - abrir um arquivo para leitura com o modo 'r'
'E se eu não quiser deletar o conteúdo e só acrescentar mais informações quando o arquivo já existir???'
O modo 'r' abre o arquivo. Ele coloca o ponteiro no início do arquivo e lê todo seu conteúdo até o final. Use o modo 'r+' para ativar também a escrita junto com a leitura. Como o ponteiro é posicionado no início do arquivo, o novo conteúdo ficará no início e não no final. Caso o arquivo não exista, ele retorna um erro e não tenta cria o arquivo. Caso você queira criar o arquivo caso ele não exista, você pode usar o modo 'a'.
Exemplo - O modo 'a'
'E se eu quiser posicionar o ponteiro no final do arquivo???'
Da mesma forma que o modo 'w', você pode usar o modo 'a' ou 'a+' para criar o seu novo arquivo com as permissões de leitura/escrita respectivamente. Se o arquivo já existir, ele não irá truncar o arquivo (não deleta nenhum conteúdo) e irá colocar o ponteiro no final para que a leitura/escrita continue a partir daí.
2 - Lendo arquivos
Agora que já aprendemos a criar e abrir nossos arquivos, vamos ver como se faz para lê-los. Para isso temos a função fgets(). A função fgets() é usada para ler um arquivo linha por linha. Ela aceita dois tipos de parâmetros, veja:
Os argumentos são o ponteiro e o tamanho em bytes.
Exemplo - lendo a primeira linha
No código acima abrimos um arquivo com o modo 'r' que posiciona o ponteiro no início do arquivo. Depois efetuamos o comando fgets() sem o parâmetro de tamanho. Isso quer dizer que toda primeira linha do arquivo está sendo lida.
Observe também que utilizamos a função fclose() para fechar o arquivo que está aberto. Procure imaginar como se, em seu desktop, você tivesse aberto um arquivo, alterado-o e depois fechado. O processo é o mesmo, e temos funções específicas para cada uma dessas ações (abrir, alterar e fechar).
Exemplo - lendo um determinado número de bytes
Agora nosso programa irá imprimir os primeiro 64 palavras da primeira linha do 'meuarquivo.txt'.
Exemplo - retornando o arquivo inteiro linha por linha
No código abaixo usaremos um loop continuo (eterno) pegando linha por linha do arquivo. Quando é verificado que a variável linha retornou vazia, ele da um break que para a repetição e fecha o arquivo. Fica a pergunta: 'E se meu arquivo tiver uma linha vazia?'. Não existe linha vazia entre o início e o final de um documento. Mesmo que determinada linha não tenha nada escrito, ela contém um marcador que indica a quebra de linha.
Outra forma mais interessante para ler um arquivo linha por linha (somente ler) é usando a função feof(). Sua função é detectar o final de um arquivo (f-End-Of-File). Porém, como já foi dito, essa função só é indicada caso você queria somente ler o arquivo, já que não funcionará com arquivos abertos com as opções 'a', 'w' e 'x'.
Observação: Sistemas operacionais diferentes tem convenções de delimitação de linhas diferentes. Quando você escreve num arquivo e deseja inserir uma quebra de linha, você precisa utilizar o(s) caractere(s) de fim de linha adequado(s) em seu sistema operacional. Sistemas baseados no Unix utilizam n como final de linha, sistemas baseados no Windows usam rn e Mac OS usa r.
Exemplo - lendo todo arquivo em um único passo
Em muitos casos temos que ler o arquivo todo. E ler linha por linha nesses casos dá mais trabalho. Nesses casos utilizamos a funcaofile_get_contents() que retorna todo o conteúdo de determinado arquivo. Veja como ela funciona:
O código acima lê todas informações contidas no arquivo 'meuarquivo.txt'. Ressaltando que não é recomendado ler arquivos muitos grandes de uma só vez. Nesse caso é recomendado ler o arquivo em partes.
3 - Escrevendo nos arquivos
Escrever nos arquivos usando PHP é também muito fácil. Primeiro você deve ter certeza que seu arquivo aberto tenha permissão para escrita. Depois basta utilizar a função fwrite e seus parâmetros. Segue a estrutura da função:
Os argumentos são o ponteiro, a string e o tamanho em bytes.
Exemplo- escrevendo uma simples linha em um arquivo
O código abaixo abrimos o arquivo indicado no modo 'w+' permitindo sua escrita. Caso o arquivo não exista, ele será criado. E depois é gravado um pequeno texto em sua linha. É importante observar que o modo 'w' cria arquivos mas também trunca o arquivo caso ele exista, ou seja, deleta todo seu conteúdo assim que ele é aberto.
Exemplo- escrevendo no início de um arquivo
Para escrevermos no início do arquivo podemos abri-lo com a opção 'r+'. Porém abriremos ele com a opção 'a+', que coloca o ponteiro no final do arquivo, e utilizaremos a função rewind() que move o ponteiro para o início do arquivo.
Exemplo- escrevendo no final de um arquivo
Para escrever no final do arquivo, utilizaremos o mesmo comando do exemplo anterior. Porém, não utilizaremos a função rewind() para mudar o ponteiro de posição.
4 - Alterar conteúdo
Concluindo esse tutorial, vamos falar sobre como alterar o conteúdo de um arquivo.
Na teoria, o que devemos fazer é ler o arquivo, linha por linha, em busca do conteúdo a ser alterado. Vamos colocando tudo dentro de uma nova string. Quando for encontrada a linha com o conteúdo a ser alterado, fazemos as modificações e re-escrevemos o arquivo utilizando-se da nova string.
No caso de alterar um arquivo, é importante verificarmos primeiro se ele existe. Para isso poderíamos usar a função file_exists() que verifica a existência de um arquivo. Mas como usaremos o parâmetro 'r+' para abrir o arquivo, já será retornado um erro indicando que o arquivo não existe. Isso por que, ao contrário dos outros parâmetros, o 'r' não tenta criar um novo arquivo caso o caminho indicado não exista.
Para substituir o conteúdo do arquivo original pelo conteúdo alterado, primeiro vamos apagar o conteúdo do arquivo atual. Para isso usaremos a função ftruncate(). Vamos ao código de exemplo:
Exemplo- lendo e alterando o conteúdo
É isso pessoal! Para escrever esse texto, utilizei como referência o site PHP-Learn-it.com, o W3Schools e o manual do PHP.
Espero que em algum momento essa referência sirva a você!
Para deletar arquivos, utilizamos a função unlink().

Postar um comentário

 
Top