Funciones del Sistema de Archivos
PHP Manual

fopen

(PHP 4, PHP 5)

fopenAbre un archivo o URL

Descripción

resource fopen ( string $filename , string $mode [, bool $use_include_path = false [, resource $context ]] )

fopen() asocia un recurso nominado, especificado por filename, a un flujo.

Parámetros

filename

Si filename está en la forma "protocolo://...", se asume que será una URL y PHP buscará un gestor de protocolo (también conocido como envoltura) para ese protocolo. Si no está registrada ninguna envoltura para ese protocolo, PHP emitirá un aviso para ayudar a rastrear problemas potenciales en el script y continuará como si filename especificara un archivo normal.

Si PHP ha decidido que filename especifica un archivo local, intentará abrir un flujo para ese archivo. El archivo debe ser accesible para PHP, por lo que se necesita asegurarse de que los permisos de acceso del archivo permiten este acceso. Si está habilitado el safe mode, o open_basedir se pueden aplicar más restricciones.

Si PHP ha decidido que filename especifica un protocolo registrado, y ese protocolo está registrado como una URL de red, PHP se asegurará de que allow_url_fopen está habilitado. Si es desactivado, PHP emitirá un aviso y la llamada a fopen fallará.

Note:

La lista de protocolos soportados se puede encontrar en Lista de Protocolos/Envolturas Soportados. Algunos protocolos (también descritos como envolturas) soportan contexto y/u opciones de php.ini. Consulte la página específica del protocolo en uso para una lista de opciones que se pueden establecer. (p.ej. el valor user_agent en php.ini usado por la envoltura http).

En la plataforma Windows, asegúrese de escapar cualquier barra invertida usada en la ruta de archivo, o use barras hacia delante.

<?php
$gestor 
fopen("c:\\folder\\resource.txt""r");
?>

mode

El parámetro mode especifica el tipo de acceso que se necesita para el flujo. Puede ser cualquiera de los siguientes:

Una lista de los modos posibles de fopen() usando mode
mode Descripción
'r' Apertura para sólo lectura; coloca el puntero al archivo al principio del archivo.
'r+' Apertura para lectura y escritura; coloca el puntero al archivo al principio del archivo.
'w' Apertura para sólo escritura; coloca el puntero al archivo al principio del archivo y trunca el archivo a longitud cero. Si el archivo no existe se intenta crear.
'w+' Apertura para lectura y escritura; coloca el puntero al archivo al principio del archivo y trunca el archivo a longitud cero. Si el archivo no existe se intenta crear.
'a' Apertura para sólo escritura; coloca el puntero al archivo al final del archivo. Si el archivo no existe se intenta crear.
'a+' Apertura para lectura y escritura; coloca el puntero al archivo al final del archivo. Si el archivo no existe se intenta crear.
'x' Creación y apertura para sólo escritura; coloca el puntero al archivo al principio del archivo. Si el archivo ya existe, la llamada a fopen() fallará devolviendo FALSE y generando un error de nivel E_WARNING. Si el archivo no exite se intenta crear. Esto es equivalente a especificar las banderas O_EXCL|O_CREAT para la llamada al sistema open(2) subyacente.
'x+' Creación y apertura para lectura y escritura; de otro modo tiene el mismo comportamiento que 'x'.
'c' Abrir el archivo para sólo escritura. Si el archivo no existe se crea. Si existe no es truncado (a diferencia de 'w'), ni la llamada a esta función falla (como en el caso con 'x'). El puntero al archivo se posiciona en el principio del archivo. Esto puede ser útil si se desea obtener un bloqueo asistido (véase flock()) antes de intentar modificar el archivo, ya que al usar 'w' se podría truncar el archivo antes de haber obtenido el bloqueo (si se desea truncar el archivo, se puede usar ftruncate() después de solicitar el bloqueo).
'c+' Abrir el archivo para lectura y escritura; de otro modo tiene el mismo comportamiento que 'c'.

Note:

Familias de sistemas operativos diferentes tienen diferentes convenciones para el final de línea. Cuando escribe un archivo de texto y quiere insertar un salto de línea, necesita usar el carácter o caracters correctos de final de línea para su sistema operativo. Los sistemas basados en Unix usan \n como el carácter de final de línea, los sistemas basados en Windows usan \r\n como caracteres de final de línea y los sistemas basados en Macintosh usan \r como carácter de final de línea.

Si usa los caracteres de final de línea erróneos cuando escribe sus archivos, se podrá encontrar con que otras aplicaciones que abran esos archivos "parecerán raras".

Windows ofrece una bandera de traducción en modo texto ('t') que traducirá de manera transparente \n a \r\n cuando se trabaja con el archivo. En contraste, puede usar 'b' para forzar el modo binario, lo cual no traducirá su información. Para usar estas banderas, especifique 'b' o 't' como el último carácter del parámetro mode.

El modo de traducción predeterminado depende de SAPI y de la versión de PHP que esté usando, por lo que se le anima a especificar siempre la bandera apropiada por razones de portabilidad. Debería usar el modo 't' si está trabajando con archivos de texto plano y usa \n para delimitar los finales de línea es su script, pero confíe que sus archivos serán legibles por aplicaciones tales como notepad. Debería usar 'b' en los demás casos.

Si no especifica la bandera 'b' cuando está trabajando con archivos binarios, puede experimentar problemas extraños con su información, incluidos archivos imagen rotos o problemas extraños con los caracteres \r\n.

Note:

Por portabilidad, se recomienda encarecidamente que siempre use la bandera 'b' cuando se abran archivos con fopen().

Note:

De nuevo, por portabilidad, también se recomienda encarecidamente que reescriba el código que usa o depende del modo 't' por lo que use los finales de línea correctos y el modo 'b' en su lugar.

use_include_path

El tercer parámetro opcional use_include_path puede ser establecido a '1' o TRUE si se desea buscar un archivo en include_path también.

context

Note: Soporte para context fue añadido en PHP 5.0.0. Para una descripción de contexts, refiérase a Funciones de Flujos.

Valores devueltos

Devuelve un recurso de puntero a archivo si tiene éxito, o FALSE si se produjo un error.

Errores/Excepciones

Si la apertura falla, se generea un error de nivel E_WARNING. Se puede usar @ para suprimir esta advertencia.

Historial de cambios

Versión Descripción
4.3.2 A partir de PHP 4.3.2, el modo por defecto se establece a binario para todas las plataformas que distinquen entre modo bianrio y modo texto. Si está teniendo problemas con sus scripts después de una acutalización, intente usar la bandera 't' como solución alternativa hasta que haya hecho su script más portable, como se mencionó antes
4.3.2 Se añadieron las opciones 'x' y 'x+'
5.2.6 Se añadieron las opciones 'c' y 'c+'

Ejemplos

Example #1 Ejemplos de fopen()

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

Notas

Warning

Cuando se usa SSL, Microsoft IIS violará el protocolo, cerrando la conexión sin mandar un indicador close_notify. PHP avisará de esto con este mensaje "SSL: Fatal Protocol Error", cuando llegue al final de los datos. Una solución a este problema es bajar el nivel de aviso de errores del sistema para que no incluya advertencias. PHP 4.3.7 y versiones posteriores detectan servidores IIS con este problema y suprime la advertencia. Si usáis la función fsockopen() para crear un socket ssl://, tendréis que suprimir la advertencia explicitamente.

Note: Cuando safe mode está habilitado, PHP comprueba si el directorio en el que el script está operando tiene el mismo UID (propietario) que el script que está siendo ejecutado.

Si está experimentando problemas al leer y escribir archivos y está usando la versión de módulo de servidor de PHP, asegúrese de que los archivos y directorios que está usando son accesibles por el proceso del servidor.

Ver también


Funciones del Sistema de Archivos
PHP Manual