Vous êtes sur la page 1sur 32

PHP:

Manipulao de Arquivos
Programao Dinamica

Manipulao de Arquivos

PHP define diversas funes para leitura e


escrita de arquivos de texto.
Arquivos de texto so ideais para o
armazenamento de dados simples.
Mais complexidade: banco de dados.
Deve-se sempre prestar ateno ao esquema
de permisses de arquivos no servidor.

file_get_contents

A funo file_get_contents l todo o contedo


de um arquivo de texto, e o armazena em uma
string.
Sintaxe:
file_get_contents($arquivo)

Retorna o contedo do arquivo, ou false,


se houver erro.

file_get_contents

modelo.html

Nome: {nome}<br>
E-mail: {email}<br>

pagina.php

$texto = file_get_contents('modelo.html');
echo str_replace(
array('{nome}','{email}'),
array('Fulano de Tal','fulano@detal.com'),
$texto
)
4

file_get_contents

Sada:

Nome: Fulano de Tal<br>


E-mail: fulano@detal.com<br>

file_get_contents

file_get_contents pode ser usada para


obter um arquivo a partir de uma URL externa.

$slashdot = file_get_contents(
'http://www.unipe.br/'
);

file_put_contents

A funo file_put_contents salva o contedo de


uma string em um arquivo de texto local.
Sintaxe:
file_put_contents($arquivo,
$conteudo)
$conteudo pode ser um array ou uma
string.
Retorna o nmero de bytes escritos no
arquivo, ou false, em caso de erro

file_put_contents
$linhas = array(
'Primeira linha.',
'Segunda linha.',
'Terceira linha.'
);
$bytes =
file_put_contents('teste.txt',$linhas);
if($bytes)
echo "$bytes bytes escritos";
else
echo "Erro!";

file_put_contents

Sada:

44 bytes escritos

texte.txt:

Primeira linha.Segunda linha.Terceira linha.

file_put_contents
$linhas = array(
'Primeira linha.',
'Segunda linha.',
'Terceira linha.'
);
$bytes =
file_put_contents(
'teste.txt', implode("\n", $linhas)
);
if($bytes)
echo "$bytes bytes escritos";
else
echo "Erro!";

10

file_put_contents

Sada:

46 bytes escritos

texte.txt:

Primeira linha.
Segunda linha.
Terceira linha.

11

Lendo um arquivo por partes

possvel ler um arquivo passo a passo, ao


invs de carreg-lo todo em memria, de uma
s vez.

til para o processamento de arquivos longos.

Funes:

fopen

fgets / fgetc

feof

fclose
12

fopen

fopen($arquivo, $modo)

L o $arquivo especificado.
Retorna uma Referncia de Arquivo, ou false em
caso de erro.
$modo pode ser:
'r'

Somente leitura.

'r+' Leitura e escrita.


'w'

Somente escrita. Cria ou sobrescreve o arquivo.

'w+' Leitura e escrita. Cria ou sobrescreve o arquivo.


'a'

Somente escrita. Cria ou continua o arquivo.

'a+' Leitura e escrita. Cria ou continua o arquivo.

13

fgetc, fgets

fgetc($recurso)
L e retorna o prximo caractere do Recurso
de Arquivo especificado.
fgets($recurso)

L e retorna a prxima linha do Recurso de


Arquivo especificado.

14

feof, fclose

feof($recurso)
Retorna true, se o arquivo indicado pelo
$recurso tiver chegado ao fim; false, do
contrrio.
fclose($recurso)

Finaliza a manipulao do arquivo e o libera


ao sistema operacional.

15

Lendo por caractere


$rec = fopen('teste.txt', 'r');
$i = 0;
while(!feof($rec)){
$linha = fgetc($rec);
echo "Caractere $i: $linha<br>\n";
$i++;
}
fclose($rec);

16

Lendo por caractere


Caractere
Caractere
Caractere
Caractere
Caractere
Caractere
Caractere
Caractere
Caractere
Caractere
Caractere
Caractere
Caractere
(...)

0: P<br>
1: r<br>
2: i<br>
3: m<br>
4: e<br>
5: i<br>
6: r<br>
7: a<br>
8: <br>
9: l<br>
10: i<br>
11: n<br>
12: h<br>
17

Lendo por linha


$rec = fopen('teste.txt', 'r');
$i = 0;
while(!feof($rec)){
$linha = fgets($rec);
echo "Linha $i: $linha<br>\n";
$i++;
}
fclose($rec);

18

Lendo por linha

Linha 0: Primeira linha.


<br>
Linha 1: Segunda linha.
<br>
Linha 2: Terceira linha.<br>

19

Escrevendo um arquivo por partes

Para escrever em um arquivo passo a passo,


usam-se as mesmas funes fopen (ateno
para as opes!) e fclose.
Para escrever no Recurso, usa-se:
fwrite($res, $string)

20

Escrevendo um arquivo por partes


$rec = fopen('teste2.txt', 'wr+');
if(!rec){
echo "Erro!";
}
else{
fwrite($rec, "The book is on the
table\n");
fwrite($rec, "1 + 1 = " . (1+1));
fclose($rec);
}

21

teste2.txt

The book is on the table


1 + 1 = 2

22

Verificando arquivos

PHP tambm possui vrias funes voltadas


testes realizados sobre arquivos do sistema.

Existncia de arquivos.
Permisses.
Tamanho e tipo.

23

file_exists

file_exists($arquivo)

Retorna true se o arquivo existe; false, do


contrrio.

if (
file_exists('/usr/local/htdocs/index.html')
)
echo "O arquivo existe!";
else
echo "O arquivo no existe!";
24

Permisses

is_readable($arquivo)

is_writable($arquivo)

is_executable($arquivo)

Funes que retornam true ou false,


dependedo a permisso verificada (leitura,
escrita, execuo)

25

Tipo de Arquivo

is_dir($arquivo)

is_file($arquivo)

is_link($arquivo)

Funes booleanas que verificam se o


arquivo , respectivamente um diretrio, um
arquivo comum ou um link simblico.

26

Diretrio e Arquivo

dirname($caminho)
Retorna a poro do $caminho composta
pelo diretrio.
basename($caminho, [$extensao])

Retorna a poro do $caminho composta


pelo nome do arquivo.
Se o nome do arquivo terminar em
$extensao, essa tambm ser eliminada.
27

Tamanho do Arquivo

filesize($arquivo)

Retorna o tamanho do arquivo (em bytes).

28

<?php
Exemplo
function ilista($txt){
echo "<li>O arquivo $txt.</li>\n";
}
$arquivo = '/etc/apt/sources.list';
if(file_exists($arquivo)){
?>
<h3><?= $arquivo ?></h3>
Diretrio: <strong><?= dirname($arquivo) ?
></strong><br>
Arquivo: <strong><?= basename($arquivo) ?></
strong><br>
Arquivo sem extenso: <strong><?=
basename($arquivo, '.list') ?></strong><br>
Tamanho: <strong><?= filesize($arquivo) ?></
29
strong> bytes<br>

<ul>
<?php
if(is_readable($arquivo)) ilista('pode ser
lido');
if(is_writable($arquivo)) ilista('pode ser
escrito');
if(is_executable($arquivo)) ilista('
executvel');
if(is_dir($arquivo)) ilista(' um
diretrio');
if(is_file($arquivo)) ilista(' um arquivo
comum');
if(is_link($arquivo)) ilista(' um link
simblico');
?>
30
</ul>

<?php
}
else {
echo "Erro: arquivo no existe.<br>";
}
?>

31

Sada

32