fopen() asocia un recurso con nombre,
especificado por nombre_archivo, a una
secuencia. Si nombre_archivo es de la
forma "esquema://...", se asume que es una URL y PHP
buscará por un gestor de protocolo (también
conocido como envoltura) para tal esquema. Si no hay envolturas
registradas para ese protocolo, PHP emitirá una noticia
para ayudarle a rastrear problemas potenciales en su script, y
luego continúa como si
nombre_archivo indicara un archivo
corriente.
Si PHP decide que nombre_archivo hace
referencia a un archivo local, entonces intentará abrir
una secuencia sobre ese archivo. El archivo debe ser asequible
para PHP, así que debe asegurarse de que los permisos de
acceso del archivo sean los apropiados. Si tiene habilitado
safe mode, o open_basedir, pueden aplicarse
mayores restricciones.
Si PHP decide que nombre_archivo hace
referencia a un protocolo registrado, y ese protocolo está
registrado como una URL de red, PHP verificará que allow_url_fopen se encuentre
habilitado. Si no es así, PHP emitirá una
advertencia y la llamada a fopen fallará.
Nota:
La lista de protocolos soportados puede encontrarse en Apéndice L. Algunos protocolos (también
conocidos como envolturas) soportan un
contexto u opciones
php.ini. Refiérase a la página específica
del protocolo en uso para una lista de opciones que pueden
definirse. (Por ejemplo, el valor php.iniuser_agent usado por la envoltura
http) Para una descripción de los
contextos y el parámetro
contexto_z, consulte Referencia CVIII, Funciones de Secuencias.
Nota: Soporte de contexto fue
introducido con PHP.5.0.0.
El parámetro modo especifica el
tipo de acceso que requiere para la secuencia. Puede ser
cualquiera de los siguientes valores:
Tabla 1.
Una lista de modos posibles para fopen()
usando modo
modo
Descripción
'r'
Apertura para sólo lectura; ubica el apuntador de
archivo al comienzo del mismo.
'r+'
Apertura para lectura y escritura; ubica el apuntador de
archivo al comienzo del mismo.
'w'
Apertura para sólo escritura; ubica el apuntador de
archivo al comienzo de éste y lo trunca a una
longitud de cero. Si el archivo no existe, intenta crearlo.
'w+'
Apertura para lectura y escritura; ubica el apuntador de
archivo al comienzo de éste y lo trunca a una
longitud cero. Si el archivo no existe, intenta crearlo.
'a'
Apertura para sólo escritura; ubica el apuntador de
archivo al final del mismo. Si el archivo no existe, intenta
crearlo.
'a+'
Apertura para lectura y escritura; ubica el apuntador de
archivo al final del mismo. Si el archivo no existe, intenta
crearlo.
'x'
Creación y apertura para sólo escritura; ubica
el apuntador de archivo al comienzo de éste. Si el
archivo ya existe, la llamada a fopen()
fallará devolviendo FALSE y generando un error de
nivel E_WARNING. Si el archivo no
existe, intenta crearlo. Esto es equivalente a especificar
las banderas O_EXCL|O_CREAT en la llamada
de sistema open(2) interna. Esta
opción es soportada en PHP 4.3.2 y versiones
posteriores, y sólo funciona con archivos locales.
'x+'
Creación y apertura para lectura y escritura; ubica
el apuntador de archivo al comienzo de éste. Si el
archivo ya existe, la llamada a fopen()
fallará devolviendo FALSE y generando un error de
nivel E_WARNING. Si el archivo no
existe, intenta crearlo. Esto es equivalente a especificar
las banderas O_EXCL|O_CREAT en la llamada
de sistema open(2) interna. Esta
opción es soportada en PHP 4.3.2 y versiones
posteriores, y sólo funciona con archivos locales.
Nota:
Diferentes familias de sistemas operativos tienen diferentes
convenciones sobre el final-de-línea. Cuando escribe a un
archivo de texto y desea insertar un salto de línea,
necesita usar los caracteres correctos de final-de-línea
para su sistema operativo. Los sistemas basados en Unix usan
\n como el caracter de final de línea,
los sistemas basados en Windows usan \r\n
como los caracteres de final de línea, y los sistemas
basados en Macintosh usan \r como el caracter
de final de línea.
Si usa los caracteres de final de línea equivocados
cuando crea sus archivos, puede que encuentre que otras
aplicaciones que abren esos archivos lucirán
"extraño".
Windows ofrece una bandera de traducción de modo-texto
('t') la cual traducirá
transparentemente \n a
\r\n cuando trabaje con el archivo. En
contraste, también puede usar 'b' para
forzar el modo binario, el cual no traduce sus datos. Para usar
éstas banderas, indique 'b' o
't' como el último caracter del
parámetro modo.
El modo de traducción predeterminado depende de la SAPI y
la versión de PHP que usa, así que es recomendable
especificar siempre la bandera apropiada por razones de
portabilidad. Debería usar el modo 't'
si trabaja con archivos de texto-plano y usa
\n para delimitar los finales de línea
en su script, pero espera que sus archivos sean legibles en
aplicaciones como el bloc de notas. Debería usar el modo
'b' en todos los demás casos.
Si no especifica la bandera 'b' cuando trabaja con archivos
binarios, puede experimentar problemas con sus datos, incluyendo
archivos de imágen corruptos y problemas extraños
con los caracteres \r\n.
Por razones de portabilidad, es bastante recomendable que
siempre usa la bandera 'b' cuando abre archivos con
fopen().
De nuevo, por razones de portabilidad, es asimismo muy
recomendable que re-escriba el código que use o dependa
del modo 't' para que use los finales de
línea correctos y el modo 'b' en su
lugar.
A partir de PHP 4.3.2, el modo predeterminado es definir
binario para todas las plataformas que distinguen entre modos
binario y de texto. Si tiene problemas con sus scripts
después de actualizarse, intente usar la bandera
't' como una solución temporal hasta
que haya hecho su script más portable como se menciona
más arriba.
El tercer parámetro, opcional,
usar_ruta_inclusion puede definirse como
'1' o TRUE si desea buscar por el archivo en include_path, también.
Si la apertura falla, la función devuelve FALSE y se
genera un error de nivel E_WARNING. Es
posible usar @ para suprimir
tal advertencia.
Si experimenta problemas con la lectura y escritura sobre
archivos, y está usando la versión tipo
módulo de servidor de PHP, recuerde asegurarse de que los
archivos y directorios que está usando sean asequibles
para el proceso del servidor.
En la plataforma Windows, tenga cuidado de escapar cualquier
barra invertida usada en la ruta al arcivo, o use barras hace
adelante.
Cuando se usa SSL,
Microsoft IIS violara el protocolo, cerrando la conexion sin mandar un
indicador close_notify. PHP avisara de esto con este mensaje "SSL:
Fatal Protocol Error", cuando llegue al final de los datos. Una
solucion 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
usais la funcion fsockopen() para crear un socket
ssl://, tendreis que suprimir la advertencia
explicitamente.
Nota: Cuando safe-mode (modo-seguro)
está activado, PHP comprueba si los directorios que va a
utilizar tienen la misma UID que el script que está siendo
ejecutado.