(PHP 4, PHP 5, PHP 7)
fopen — Abre um arquivo ou URL
$filename
, string $mode
[, bool $use_include_path
[, resource $context
]] )
fopen() conecta um recurso nomeado, especificado por
filename
, a um stream.
filename
Se filename
estiver na forma de "scheme://...", é
assumido que seja uma URL, e o PHP buscará por um manipulador de protocolo
(também conhecido como wrapper) para aquele scheme. Se nenhum wrapper para
aquele protocolo estiver registrado, o PHP emitirá um aviso para ajudá-lo
a rastrear potenciais problemas no seu script, e então continuará presumindo
que filename
especifica um nome de arquivo.
Se o PHP decidiu que filename
se refere
a um arquivo local, então ele tentará abrir um stream para aquele arquivo.
O arquivo precisa ser acessível pelo PHP, então você precisa assegurar
que as permissões de acesso do arquivo permitem este acesso.
Se você tiver ativado safe mode
ou open_basedir, outras
restrições podem se aplicar.
Se o PHP decidiu que filename
se refere
a um protocolo registrado e esse protocolo estiver registrado como
um protocolo de rede, o PHP irá verificar para ter certeza que
allow_url_fopen está
ativado. Se estiver desligado, o PHP emitirá um alerta e
a chamada ao fopen irá falhar.
Nota:
A lista de protocolos suportados pode ser encontrada em Protocolos e Wrappers suportados. Alguns protocolos (também mencionados como wrappers) suportam context e/ou opções do php.ini. Recorra à página específica do protocolo em uso para uma lista das opções que podem ser definidas. (ex.: o valor php.ini user_agent utilizado pelo wrapper http).
Na plataforma Windows, tenha cuidado de escapar qualquer barra invertida usada no caminho do arquivo, ou use barras normais.
<?php
$handle = fopen("c:\\data\\info.txt", "r");
?>
mode
O parâmetro mode
especifica o tipo de acesso
que você precisa ao stream. Pode ser um dos seguintes:
mode |
Descrição |
---|---|
'r' | Abre somente para leitura; coloca o ponteiro do arquivo no começo do arquivo. |
'r+' | Abre para leitura e escrita; coloca o ponteiro do arquivo no começo do arquivo. |
'w' | Abre somente para escrita; coloca o ponteiro do arquivo no começo do arquivo e reduz o comprimento do arquivo para zero. Se o arquivo não existir, tenta criá-lo. |
'w+' | Abre para leitura e escrita; coloca o ponteiro do arquivo no começo do arquivo e reduz o comprimento do arquivo para zero. Se o arquivo não existir, tenta criá-lo. |
'a' | Abre somente para escrita; coloca o ponteiro do arquivo no final do arquivo. Se o arquivo não existir, tenta criá-lo. |
'a+' | Abre para leitura e escrita; coloca o ponteiro do arquivo no final do arquivo. Se o arquivo não existir, tenta criá-lo. |
'x' |
Cria e abre o arquivo somente para escrita; coloca o ponteiro no
começo do arquivo. Se o arquivo já existir, a chamada a
fopen() falhará, retornando FALSE e
gerando um erro de nível E_WARNING . Se
o arquivo não existir, tenta criá-lo. Isto é equivalente
a especificar as flags O_EXCL|O_CREAT para a
chamada de sistema open(2).
|
'x+' |
Cria e abre o arquivo para leitura e escrita; coloca o ponteiro no
começo do arquivo. Se o arquivo já existir, a chamada a
fopen() falhará, retornando FALSE e
gerando um erro de nível E_WARNING . Se
o arquivo não existir, tenta criá-lo. Isto é equivalente
a especificar as flags O_EXCL|O_CREAT para a
chamada de sistema open(2).
|
Nota:
Famílias de sistemas operacionais diferentes têm convenções de delimitação de linhas diferentes. Quando você escreve um arquivo texto e quer inserir uma quebra de linha, você precisa utilizar o(s) caractere(s) de fim de linha adequado(s) ao seu sistema operacional. Sistemas baseados no Unix utilizam \n como caractere de final de linha, sistemas baseados no Windows utilizam \r\n e sistemas baseados no Macintosh utilizam \r.
Se escrever caracteres de fim de linha inadequados em seus arquivos, eles deverão "parecer engraçados" quando você os abrir em outras aplicações.
O Windows oferece uma flag de tradução do modo texto ('t') que traduz, transparentemente, \n para \r\n quando trabalhando no arquivo. Em contraste, você também pode utilizar 'b' para forçar o modo binário, que não irá traduzir o arquivo. Para usar essas flags, informe ou 'b' ou 't' como o último caractere no parâmetro
mode
.O modo de tradução padrão depende da SAPI e da versão do PHP que você estiver usando, então você é encorajado a sempre utilizar a flag apropriada por razões de portabilidade. Você deve usar o modo 't' se estiver trabalhando em arquivos texto simples e utilizar \n para delimitar as linhas em seu script, de forma que você pode esperar que eles sejam lidos em outras aplicações como o Notepad. Você deve usar 'b' em todos os outros casos.
Se você não especificar a flag 'b' quando trabalhar com arquivos binários, você pode passar por problemas estranhos com seus dados, incluindo arquivos de imagens danificados e problemas estranhos com os caracteres \r\n.
Nota:
Para portabilidade, é fortemente recomendado que você sempre utilize a flag 'b' quando abrir arquivos com fopen().
Nota:
Novamente para portabilidade, também é fortemente recomendado que você reescreva códigos que utilizem ou confiem no modo 't', de forma que passem a utilizar os fins de linha corretos e o modo 'b'.
use_include_path
O terceiro parâmetro opcional use_include_path
pode ser definido para '1' ou TRUE
se você quiser buscar o arquivo
também no include_path.
context
Nota: O suporte ao contexto foi adicionado no PHP 5.0.0. Para uma descrição de contextos, veja Streams.
Retorna um recurso de ponteiro de arquivo em caso de sucesso,
ou FALSE
em caso de erro.
Se a abertura falhar, um erro nível E_WARNING
é gerado. Você pode utilizar
@ para
suprimir esse alerta.
Versão | Descrição |
---|---|
4.3.2 | A partir do PHP 4.3.2, o modo padrão é definido para binário em todas as plataformas que distinguem entre modo texto e binário. Se você estiver tendo problemas com seus scripts depois de uma atualização, tente acrescentar a flag 't' como um paliativo até que você tenha tornado seus scripts portáveis como mencionado acima. |
4.3.2 | As opções 'x' e 'x+' foram adicionadas |
Exemplo #1 Exemplos de 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");
?>
Quando usando SSL, o Microsoft IIS irá violar o protocolo fechando a conexão sem enviar uma notificação close_notify. O PHP acusará isso como sendo "SSL: Fatal Protocol Error" quando tentar ler os dados. Para prevenir isso, o valor de error_reporting deve ser reduzido para um nível que não inclui avisos. para o nível que não emita warnings. O PHP 4.3.7 e seguintes conseguem detectar servidores IIS defeituosos quando você abre um stream utilizando o wrapper https:// e suprimirá os avisos. Se você está usando fsockopen() para criar um socket ssl://, a responsabilidade de detectar e suprimir esse aviso passa para você.
Nota: Quando o safe-mode está ativo, o PHP verifica se o diretório no qual o script está em operação tem o mesmo UID (proprietário) do script que está sendo executado.
Se você está tendo problemas com a leitura e gravação para arquivos e você está usando a versão de módulo de servidor do PHP, lembre-se de que os arquivos e diretórios que você está usando precisam ser acessíveis ao processo do servidor HTTP.