Autor Tema: [TUTORIAL] ¡Aprende Fopen()!  (Leído 697 veces)

Desconectado Siquillote

  • PHPero Master
  • ******
  • Mensajes: 4.229
  • Karma: 179
  • Sexo: Masculino
    • Ver Perfil
[TUTORIAL] ¡Aprende Fopen()!
« en: 03 de Noviembre de 2009, 16:56:21 pm »
resource fopen ( string nombre_archivo, string modo [, bool usar_ruta_inclusion [, resource contexto_z]] )


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 M. 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. (p.ej. el valor php.ini user_agent usado por la envoltura http)

Nota: Soporte de contexto fue introducido con PHP.5.0.0.

Nota: A partir de PHP 4.3.2, el modo predeterminado es definido como binario para todas las plataformas que distinguen entre modos binario y de texto. Si está experimentando problemas con sus scripts después de actualizarse, intente usar la bandera 't' como solución temporal hasta que haga su script más portable, tal y como se explica más adelante.

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.

Nota: Por razones de portabilidad, es bastante recomendable que siempre usa la bandera 'b' cuando abre archivos con fopen().

Nota: Nuevamente, por razones de portabilidad, es bastante recomendable que re-escriba el código que usa o depende del modo 't', de modo que use los finales de línea correctos y el modo 'b' en su lugar.

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.

Ejemplo 1. Ejemplos de fopen()

<?php
$gestor = fopen("/home/rasmus/archivo.txt", "r");
$gestor = fopen("/home/rasmus/archivo.gif", "wb");
$gestor = fopen("http://www.example.com/", "r");
$gestor = fopen("ftp://usuario:contrasenya@example.com/un_archivo.txt", "w");
?> 
 


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.


<?php
$gestor = fopen("c:\\datos\\info.txt", "r");
?> 


Fuente : aquí
« Última modificación: 05 de Noviembre de 2009, 15:27:57 pm por Siquillote »

#Fdo. Physlet

Comunidad PHPeros

[TUTORIAL] ¡Aprende Fopen()!
« en: 03 de Noviembre de 2009, 16:56:21 pm »

Desconectado Masato

  • PHPero Avanzado
  • ****
  • Mensajes: 480
  • Karma: 12
  • Sexo: Masculino
  • <?php echo "Solo quiero aprender php"; ?>
    • Ver Perfil
    • Masato Design!
Re:[TUTORIAL] ¡Aprende Fopen()!
« Respuesta #1 en: 04 de Noviembre de 2009, 03:29:54 am »
Buen tuto, de seguro a mas de uno le hace falta, también con fopen pueden hacer un contador muy sencillo, kekoman postio uno los otros meses xD

Desconectado TheGeorge

  • PHPero Avanzado
  • ****
  • Mensajes: 351
  • Karma: 13
  • Sexo: Masculino
    • Ver Perfil
    • websources
Re:[TUTORIAL] ¡Aprende Fopen()!
« Respuesta #2 en: 04 de Noviembre de 2009, 05:39:56 am »
La verdad es que da como pereza leer toda esa información asi de sopetón.

Te faltó un poco para ganarte el karma porque necesita en tu aporte recrearle el ojo a los foreros.

Sin embargo buen aporte siquillote  ;)

[EDIT]
Si pner la fuente dek tutorial es una regla. Este post fue sacado copiado y pegado de acá.
Saludos
« Última modificación: 04 de Noviembre de 2009, 05:45:42 am por TheGeorge »
¡Solo sé, que nada sé...!

Desconectado NDSi

  • PHPero Avanzado
  • ****
  • Mensajes: 410
  • Karma: 8
  • Sexo: Masculino
    • Ver Perfil
Re:[TUTORIAL] ¡Aprende Fopen()!
« Respuesta #3 en: 04 de Noviembre de 2009, 06:11:11 am »
¿Esto seria como include() o require_once()?
¿O es otra cosa?

Desconectado Siquillote

  • PHPero Master
  • ******
  • Mensajes: 4.229
  • Karma: 179
  • Sexo: Masculino
    • Ver Perfil
Re:[TUTORIAL] ¡Aprende Fopen()!
« Respuesta #4 en: 04 de Noviembre de 2009, 15:08:04 pm »
George , hola compa si es cierto se me olvido poner el link de donde lo saqué. Pero estoi sefuro de que lo saque de PHP.net :S Nunca entre en el link que tu dices.

Si es cierto que leer todo esto da vago por que ver tanta letra te disgusta xDD. En cuento tenga time le pongo cosas para que sea mas visible :)

Gracias por responder :D

#Fdo. Physlet

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:[TUTORIAL] ¡Aprende Fopen()!
« Respuesta #5 en: 04 de Noviembre de 2009, 16:00:39 pm »
De nuevo, añade la fuente.

Saludos!
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es