fopen

(PHP 4, PHP 5, PHP 7, PHP 8)

fopenAbre um arquivo ou URL

Descrição

fopen(
    string $filename,
    string $mode,
    bool $use_include_path = false,
    ?resource $context = null
): resource|false

fopen() conecta um recurso nomeado, especificado por filename, a um fluxo.

Parâmetros

filename

Se filename estiver na forma de "esquema://...", assume-se que seja uma URL, e o PHP buscará por um manipulador de protocolo (também conhecido como empacotador) para aquele esquema. Se nenhum empacotador para aquele protocolo estiver registrado, o PHP emitirá uma aviso para auxiliar no rastreio de potenciais problemas no script, e então continuará presumindo que filename especifica um arquivo normal.

Se o PHP decidiu que filename se refere a um arquivo local, então ele tentará abrir um fluxo para aquele arquivo. O arquivo precisa ser acessível pelo PHP, portanto é necessário garantir que as permissões de acesso do arquivo possibilitem este acesso. Se estiver habilitado 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 uma URL de rede, o PHP irá verificar para ter certeza que allow_url_fopen está habilitado. Se não estiver, o PHP emitirá um alerta e a chamada a fopen() irá falhar.

Note:

A lista de protocolos suportados pode ser encontrada em Protocolos e empacotadores 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 protocolo 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 fluxo. Pode ser um dos seguintes:

Lista dos possíveis modos de fopen() utilizando mode
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; fora isso, tem o mesmo comportamento de 'w'.
'a' Abre somente para escrita; coloca o ponteiro do arquivo no final do arquivo. Se o arquivo não existir, tenta criá-lo. Neste modo, fseek() não tem efeito, a escrita é sempre adicionada.
'a+' Abre para leitura e escrita; coloca o ponteiro do arquivo no final do arquivo. Se o arquivo não existir, tenta criá-lo. Neste modo, fseek() somente afeta a posição de leitura, escrita é sempre adicionada.
'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 opções O_EXCL|O_CREAT para a chamada de sistema open(2) subjacente.
'x+' Cria e abre o arquivo para leitura e escrita; fora isso, tem o mesmo comportamento de 'x'.
'c' Abre o arquivo somente para escrita. Se o arquivo não existir, ele é criado. Se existir, ele não é truncado (ao contrário de 'w') e nem a chamada a esta função falha (como no caso de 'x'). O ponteiro é posicionado no início do arquivo. Isto pode ser útil se for desejado obter uma trava consultiva (consulte flock()) antes de tentar modificar o arquivo, já que usar 'w' poderia trincar o arquivo antes que a trava fosse obtida (se o truncamento for desejado, ftruncate() pode ser usando depois que a trava for requisitada).
'c+' Abre o arquivo para leitura e escrita; fora isso, tem o mesmo comportamento de 'c'.
'e' Define a opção close-on-exec no descritor do arquivo aberto. Somente disponível no PHP compilado em sistemas conforme POSIX.1-2008.

Note:

Diferentes famílias de sistemas operacionais têm diferentes convenções de final de linha. Quando um arquivo texto é escrito e deseja-se inserir uma quebra de linha, é necessário usar o caractere correto de fim de linha para o sistema operacional. Sistemas baseados no Unix utilizam \n como o caractere de fim de linha, sistemas baseados no Windows utilizam \r\n e sistemas baseados no Macintosh (Mac OS Classic) utilizavam \r.

Se forem usados os caracteres de fim de linha inadequados em seus arquivos, pode ser que esses arquivos "parecer estranhos" quando forem abertos em outras aplicações.

O Windows oferece uma opção de tradução do modo texto ('t') que traduz, transparentemente, \n para \r\n quando estiver trabalhando com o arquivo. Em contraste, pode-se também utilizar 'b' para forçar o modo binário, que não irá traduzir os dados. Para usar essas opções, especifique 'b' ou 't' como o último caractere do parâmetro mode.

O modo de tradução padrão é 'b'. Pode-se usar o modo 't' ao trabalhar com arquivos texto e usar \n para delimitar as linhas no script, de forma que pode-se esperar que eles sejam lidos em aplicações como versões antigas do bloco de notas. Deve-se usar 'b' em todos os outros casos.

Se for especificada a opção 't' ao trabalhar com arquivos binários, pode-se experimentar problemas estranhos com os dados, incluindo arquivos de imagens corrompidos e problemas estranhos com os caracteres \r\n.

Note:

Para portabilidade, é fortemente recomendado que se reescreva códigos que usem ou dependam do modo 't' de forma que passem a usar o fim de linha correto e o modo 'b' em seu lugar.

Note: O parâmetro mode é ignorado para os empacotadores de fluxo php://output, php://input, php://stdin, php://stdout, php://stderr e php://fd.

use_include_path

O terceiro parâmetro opcional use_include_path pode ser definido true se for desejado buscar o arquivo também no include_path.

context

Um resource de contexto de stream.

Valor Retornado

Retorna um recurso de ponteiro de arquivo em caso de sucesso, ou false em caso de falha

Erros/Exceções

Em caso de falha, um E_WARNING será emitido.

Registro de Alterações

Versão Descrição
7.0.16, 7.1.2 A opção 'e' foi adicionada.

Exemplos

Example #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:[email protected]/somefile.txt", "w");
?>

Notas

Warning

Ao usar SSL, o Microsoft IIS violará o protocolo fechando a conexão sem enviar uma notificação close_notify. O PHP reportará isso como "SSL: Fatal Protocol Error" quando chegar ao final dos dados. Para contornar isso, o valor de error_reporting deve ser reduzido a um nível que não inclua avisos. O PHP pode detectar servidores IIS defeituosos quando o stream é aberto usando o wrapper https:// e suprimirá o aviso. Ao usar fsockopen() para criar um soquete ssl://, o desenvolvedor é responsável por detectar e suprimir este aviso.

Note:

Se houver problemas com leitura e gravação de arquivos e a versão de módulo de servidor do PHP estiver sendo usada, deve-se garantir que os arquivos e diretórios sendo usados são acessíveis ao processo do servidor.

Note:

Esta função também pode ter sucesso quando filename for um diretório. Se não houver certeza se filename é um arquivo ou um diretório, pode ser necessário usar a função is_dir() antes de chamar fopen().

Veja Também