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:
$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
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
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???'
Exemplo - O modo 'a'
'E se eu quiser posicionar o ponteiro no final do arquivo???'
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:
$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
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
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.
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:
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:
$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.
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.
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.
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
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().
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);
$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.');
?>
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.');
?>
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.');
?>
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.');
?>
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);
$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);
?>
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);
?>
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);
?>
- 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);
?>
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);
?>
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);
$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);
}
?>
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);
}
?>
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);
}
?>
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);
}
?>
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 :