Hyouki Hyouki  • 16.09.12 9:27

MANIPULANDO ARQUIVOS COM PHP Empty MANIPULANDO ARQUIVOS COM PHP 16.09.12 9:27

1 - Criando os arquivos

Para começar, vamos primeiro criar o nosso arquivo. Para isso existe a função fopen().
Com esta função podemos criar qualquer arquivo novo. Sua sintaxe é a seguinte:
Código:
fopen ($nomedoarquivo, $modo);
Como podemos ver, a função fopen possui dois argumentos: O nome do arquivo e o modo que esse arquivo será criado.

$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.
Segue abaixo a tabela com os modos de arquivos retirados da documentação oficial do PHP.
Modo Descriçã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.
Vamos a alguns exemplos práticos:

Exemplo- criar um novo arquivo para escrita
Código:
<?php
$arquivo = fopen('meuarquivo.txt','w');
if ($arquivo == false) die('Não foi possível criar o arquivo.');
?>
O código acima cria um novo arquivo (para escrita somente) no diretório corrente do arquivo PHP executado.
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.

Exemplo - criar um novo arquivo para leitura e escrita
Código:
<?php
$arquivo = fopen('meuarquivo.txt','w+');
if ($arquivo == false) die('Não foi possível criar o arquivo.');
?>
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.
O modo 'w+' coloca o ponteiro no início do arquivo. Se o arquivo já existir, ele deletará todo o conteúdo.

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???'
Código:
<?php
$arquivo = fopen('meuarquivo.txt','r');
if ($arquivo == false) die('O arquivo não existe.');
?>
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???'
Código:
<?php
$arquivo = fopen('meuarquivo.txt','a');
if ($arquivo == false) die('Não foi possível criar o 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:
Código:
fgets($ponteiro, $tamanho);
Os argumentos são o ponteiro e o tamanho em bytes.

$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).
Exemplo - lendo a primeira linha
Código:
<?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);
?>
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
Código:
<?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);
?>
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.
Código:
<?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);
?>
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'.
Código:
<?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);
?>
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 funcao file_get_contents() que retorna todo o conteúdo de determinado arquivo. Veja como ela funciona:
Código:
<?php
$arquivo = fopen('meuarquivo.txt','r');
$string = file_get_contents('meuarquivo.txt');
echo $string;
fclose($arquivo);
?>
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:
Código:
fwrite($ponteiro, $string, $tamanho);
Os argumentos são o ponteiro, a string e o tamanho em bytes.

$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.
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.
Código:
<?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);
}
?>
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.
Código:
<?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);
}
?>
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.
Código:

<?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);
}
?>
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
Código:
<?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);
}
?>
É 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ê!

Só não esquecendo de dizer que para deletar arquivos, utilizamos a função unlink().
Agradeçimentos :
Lucasxd111
Permissões neste sub-fórum
Não podes responder a tópicos

BH Servers

Recomendamos a BH Servers com proteção DDOS gratuita em Cloud Server de alta performance. Entrega imediata.