You are on page 1of 6

fopen

(PHP 3, PHP 4 , PHP 5)

fopen -- Abre um arquivo ou uma URL

Descrição

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

fopen() conecta um recurso nomeado, especificado em filename para um stream. Se filename está na forma
"protocolo://...", é assumido que seja uma URL e o PHP irá procurar por um manipulador de protocolo (também
conhecido como wrapper) conforme o prefixo. Se nenhum wrapper para o protocolo estiver registrado, o PHP
irá emitir um alerta para ajudá-lo a rastrear problemas potenciais em seu script, presumindo que filename é um
nome de arquivo comum.

Se o PHP decidir que filename se refere a um arquivo local, então ele tentará abrir o stream para aquele
arquivo. Esse arquivo precisa ser acessível pelo PHP, então você precisa certificar-se que as permissões de
acesso que garantam esse acesso. Se você está com safe mode ativado ou open_basedir, essas restrições
serão aplicadas.

Se o PHP decidir que filename se refere a um protocolo registrado, e que o protocolo está registrado como um
URL de rede, o PHP irá verificar se allow_url_fopen está ativado. Se ele estiver desligado, o PHP irá emitir um
alerta e a chamada a fopen irá falhar.

Nota: A lista de protocolos registrados pode ser encontrada em Apêndice L. Alguns protocolos (também
conhecidos como wrappers) suportam opções de context e/ou php.ini. Veja na página específica do protocolo
em uso para uma lista de opções possíveis. (por exemplo, o valor php.ini user_agent utilizado pelo wrapper
http) Para uma descrição de contexts e o parâmetro zcontext, veja Referência CXX, Stream Functions.

O parâmetro mode configura o tipo de acesso que você precisa no stream. Pode ser um dos seguintes:

Tabela 1. Lista dos possíveis modos de fopen() para o parâmetro mode

mode Descrição
'r' Abre somente leitura; coloca o ponteiro do arquico no começo do arquivo.
'r+' Abre para leitura e escrita; coloca o ponteiro do arquivo no começo do arquivo.
Abre para escrita somente; coloca o ponteiro do arquivo no começo do arquivo e diminui (trunca) o
'w'
tamanho do arquivo para zero. Se o arquivo não existe, tenta criá-lo.
Abre o arquivo para leitura e escrita; coloca o ponteiro do arquivo no começo e diminui (trunca) o
'w+'
tamanho do arquivo para zero. Se o arquivo não existe, tenta criá-lo.
'a' Abre para escrita somente; coloca o ponteiro do arquivo no final. Se o arquivo não existe, tenta criá-lo.
Abre o arquivo para leitura e escrita; coloca o ponteiro do arquivo no final. Se o arquivo não existe,
'a+'
tenta criá-lo.
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 e gerando um erro nível E_WARNING. Se o
'x' arquivo não existe, tenta criá-lo. Isto é o equivalente a informar as flags O_EXCL|O_CREAT numa
chamada a open(2). Esta opção é suportada no PHP 4.3.2 e posteriores, e somente funciona em
arquivos locais.
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 e gerando um erro nível E_WARNING. Se o
'x+' arquivo não existe, tenta criá-lo. Isto é o equivalente a informar as flags O_EXCL|O_CREAT numa
chamada a open(2). Esta opção é suportada no PHP 4.3.2 e posteriores, e somente funciona em
arquivos locais.

Exemplo 1. exemplo do fopen()

<?php
$handle = fopen ("/home/rasmus/file.txt", "r");
$handle = fopen ("/home/rasmus/file.gif", "wb");
$handle = fopen ("http://www.example.com/", "r");
$handle = fopen ("ftp://user:password@example.com/somefile.txt", "w");
?>

Exemplo 2. exemplo do fopen()

$fp = fopen("http://localhost/web09/arquivo.php", "r");
while($linha = fread($fp, 1024))
$body.=$linha;
echo $body;

Exemplo 3. exemplo do fopen()

<?
$arquivo="medio.txt";
$fp=fopen($arquivo, "r");
while ($linha=fgets($fp, 1024)) {
list($insc, $nome, $pr1, $pr2, $pr3, $pontos, $classific, $result)=explode("\t", $linha);
echo "<tr><td class='celula'><b>Inscrição:</b></td><td class='celula'>$insc</td></tr>";
echo "<tr><td class='celula'><b>Nome:</b>:</td><td class='celula'>$nome</td></tr>";
echo "<tr><td class='celula'><b>Português:</b></td><td class='celula'>$pr1</td></tr>";
echo "<tr><td class='celula'><b>Hist-Geog:</b></td><td class='celula'>$pr2</td></tr>";
echo "<tr><td class='celula'><b>Biol-Fís-Mat-Quím</td><td class='celula'>$pr3</td></tr>";
echo "<tr><td class='celula'><b>Pontuação</b></td><td class='celula'>$pontos</td></tr>";
echo "<tr><td class='celula'><b>Classificação</b></td><td
class='celula'>$classific</td></tr>";
echo "<tr><td class='celula'><b>Resultado:</b></td><td class='celula'>$status</td></tr>";
echo "<tr><td colspan='2'><hr></td></tr>";
}
}
}
?>

fgets

(PHP 4, PHP 5)

fgets — Le uma linha de um ponteiro de arquivo

Descrição

string fgets ( resource $handle [, int $length] )

Retorna uma string com até length - 1 bytes lidos do arquivo apontado por handle. A leitura
acaba quando length - 1 bytes foram lidos, encontra-se um fim de linha (newline) (que é
incluido no valor retornado) ou no fim de arquivo (EOF) (o que acontecer primeiro). Se
nenhum length for informado, o default é 1Kb, ou 1024 bytes.

Se um erro ocorrer, retorna FALSE.

Equívocos comuns:

Pessoas acostumadas a semântica do fgets em 'C' devem notar a diferenca em como o fim do
arquivo (EOF) é retornado.
fwrite ou fputs

(PHP 4, PHP 5)

fwrite — Gravação em arquivos binary-safe

Descrição

int fwrite ( resource $handle, string $string [, int $comprimento] )

fwrite() grava os conteúdos de string para o stream de arquivo apontado por handle. Se o
argumento comprimento é dado, a gravação irá parar depois de que comprimento bytes foram
escritos ou o fim da string é alcançada, o que ocorrer primeiro.

fwrite() retorna o número de bytes gravados, ou FALSE em caso de erro.

Note que se o argumento comprimento é dado, então a opção de configuração
magic_quotes_runtime será ignorada e nenhuma barra será retirada do string.

fread

(PHP 4, PHP 5)

fread — Leitura binary-safe de arquivo

Descrição

string fread ( resource $handle, int $length )

fread() lê até length bytes do ponteiro de arquivo informado em handle. A leitura é
interrompida quando length bytes foram lidos ou o fim do arquivo (eof) foi alcançado, ou
(para streams de rede) quando um pacote se torna disponível, o que ocorrer primeiro.

explode

(PHP 4, PHP 5)

explode — Divide uma string em strings

Descrição

array explode ( string $separator, string $string [, int $limit] )

Retorna uma matriz de strings, cada uma como substring de string formada pela divisão dela
a partir de fronteiras presentes nela separator. Se limit está definido, a matriz retornada
conterá o máximo de limit elementos com o último elemento contendo o resto da string.

Se separator está como uma string vazia (""), explode() retornará FALSE. Se separator
contém um valor que não está contido em string, então explode() retornará uma matriz
contendo a string.

Ainda que implode() pode por razões históricas aceitar seus parâmetros em uma das duas
ordens, explode() não pode. Você deve assegurar que o argumento separator vem antes do
argumento string.
Exercícios
Lendo arquivos no PHP: os comandos fopen(), fgets() e fread()
Escrevendo em arquivos: o comando fputs()
Quebrando Strings: o comando explode()

Construindo um contador de acessos.
Juntando tudo: construindo um portal de frases aleatórias.
Lendo Diretórios

Contador de acessos

<?
$file="soma.txt";
$fp = fopen ($file , "r+" );
$contador = fread($fp, filesize($file));
fclose($fp);
$contador +=1;
$fp = fopen($file,"w+");
fputs($fp, $contador);
fclose($fp);
echo "A página foi acessada ".$contador." vezes";
?>

Portal de frases

<?
// ler o arquivo frases.txt
$file="frases.txt";
$fp=fopen($file, "r");

// enquanto houver linhas na frase, atribua-as à variável $linha.

while($linha=fgets($fp, 1024)) {
// associa o vetor $state a cada linha do texto, ou seja,
// $state[0] = frase 0
// $state[1] = frase 1 ...
list($state[]) = explode("\n", $linha);
//echo $state."<br>";
}
// conta o tamanho
$size=count($state)-1;
$sorteio=mt_rand(0, $size-1);

echo "frase ".$sorteio.": ".$state[$sorteio]."<br>";

?>

Tokenizando Strings

Tokenizar significa dividir uma string em Tokens, ou seja, em partes definidas
por um delimitador. Podemos utilizar este recurso para armazenar palavras de um
texto em um vetor para busca posterior, por exemplo. Este recurso é útil quando
queremos fazer um mecanismo de busca por palavras em nosso site.

<?php
$string = "This is an example string";
$tok = strtok($string," ");
while ($tok) {
echo "Word=$tok<br>";
$tok = strtok(" ");//aqui devemos atribuir novamente o delimitador
}
?>

Lendo Diretórios

<?
function diretorio ($titulo) {
$dn=opendir($titulo);
echo '<ul type="disc">';
while($file=@readdir($dn)) {
if ($file != "." && $file !="..") {
$clean_file=substr($file, 0,-4);
$arquivo=substr($titulo, -11).basename($file);
print '<li><a href="'.$arquivo.'">'.$clean_file.'</a></li>';
}
}
closedir();
echo "</ul>";
}

diretorio("/var/www/htdocs/Regis/fcw/");
?>

Integrando Flash e PHP

O arquivo Flash deve usar a classe LoadVars para se comunicar com o PHP

var texto = new LoadVars();
texto.load("http://www.cefetce.br/Regis/estaticas/links.php");
texto.html=true;
texto.onLoad = function(ok) {
if(ok) links_txt.htmlText = texto.links;
else links_txt.text = "Desculpe-me, mas não tenho arquivos no momento!";
}

Quando queremos um caminho de ida e de volta, utilizamos o método sendAndLoad().
Ex.

System.useCodepage=true;
sorteada = Math.round(Math.random()*75);
sorteio_txt.text = sorteada;
var envia = new LoadVars();
var recebe = new LoadVars();

envia.sorteio = sorteada;
envia.sendAndLoad("http://www.cefetce.br/Regis/sorteio.php", recebe, "GET");
recebe.onLoad = function(ok) {
if(ok) frase_txt.text = recebe.frase;
else frase_txt.text = "Erro na leitura!";
}

E no PHP, teríamos:

<?
$file="frases.txt";
$fp=fopen($file, "r");

while($linha=fgets($fp, 1024)) {
list($state[]) = explode("\n", $linha);
}

$sorteio=$_GET['sorteio'];
echo "&frase=".$state[$sorteio];

?>