1 . Abriendo un fichero de texto, lectura, escritura y añadido 2 . Subir ficheros al servidor 3 . Forzar descarga de ficheros al navegador
En este nuevo tutorial, voy a tratar el tema de los ficheros y como se trabaja en ellos desde PHP. No va a ser exhaustivo ni mucho menos, pretende proporcionaros las bases para que experimentéis por vuestra cuenta y riesgo. Vamos a aprender unas cuantas cosas útiles al respecto de los ficheros, así que, si estáis listos, empezamos. Para este tutorial solo váis a necesitar PHP, nada más (ni MySQL ni otra cosa).
Abriendo un fichero de texto, lectura, escritura y añadido
Lo primero que vamos a hacer es escribir un sencillo fichero de texto. Lo abriremos, escribiremos un par de líneas dentro de él y luego lo cerraremos. El código que realiza esto se puede ver a continuación.
<? #Abrimos el fichero en modo de escritura $DescriptorFichero = fopen("fichero_prueba.txt","w");
Así pues, el script anterior lo único que hace es abrir un fichero llamado fichero_prueba.txt, y escribe dentro de él dos líneas de texto. Os habréis fijado en el de detrás de las líneas de texto, en las variables $string1 y $string2. Esto se debe a que, si no estuviese puesto, el programa escribiría todo seguido. Para comprobarlo, quitadlo y ejecutad de nuevo el programa. Con solo no sirva, al menos en mi sistema Windows 2000. :-) En Linux, basta con un . Otra de las cosas importantes del anterior script es algo que quizás no hayamos visto de cerca. Fijémonos en la siguiente línea:
$DescriptorFichero = fopen("fichero_prueba.txt","w");
La función fopen sirve para abrir un fichero en un modo. Los modos pueden ser seis y son los siguientes. Además de listarlos, explicaré las diferencias (no siempre tan obvias), al respecto de ellos. Modo de apertura Qué significa
r Modo de solo lectura. Se abre el fichero y el cursor se coloca al principio del mismo, permitiendo leerlo hasta el final. r+ Modo de lectura/escritura. Se abre el fichero y el cursor se coloca al principio del mismo,permitiendo leer o escribir en el fichero. w Modo de solo escritura. Se crea el fichero si no existiese, y, si existe, se borra todo su contenido, se sitúa el cursor al principio del fichero permitiendonos escribir. w+ Modo de escritura/lectura. Si el fichero no existe, se crea, y, si existiese, se borra todo su contenido, se sitúa el cursor al principio del fichero permitiéndonos escribir y leer. a Modo de añadido. Abre el fichero, sitúa el cursor al final del mismo y permite escribir. Si el fichero no existe, lo crea, pero, en caso de existir, no borra su contenido. a+ Modo de añadido/lectura. Sitúa el cursor al final del fichero y permite escribir y leer. Si el fichero no existe, lo crea, pero, si existe, no borra su contenido.
Así pues, estos son los seis modos de abrir un fichero. Vamos ahora a ver un ejemplo en código del uso de los mismos. El siguiente script va a hacer las siguientes tareas: Crear un fichero y escribir en él dos líneas de texto. Abrir el fichero de nuevo, esta vez en modo añadido, y escribir otras dos líneas. Es poco, pero la lectura de ficheros la veremos al final de esta parte del tutorial. De momento, aquí está el código del script de PHP.
escribir2.php
<? #Abrimos el fichero en modo de escritura $DescriptorFichero = fopen("fichero_prueba.txt","w");
?>
Como podéis comprobar si abrís el fichero recién creado, éste contiene cuatro líneas, dos de ellas escritas con modo "w" y otras dos con modo "a". Si ya tenéis más o menos claro como funciona, vamos a pasar a ver dos funciones muy útiles para leer ficheros de texto: fgets() y feof(). A través de fgets() podemos leer una línea del fichero de texto cada vez. feof() sirva para saber si hemos llegado al final del fichero. Para ver como funcionan, crearemos un script que leerá el fichero que hemos creado con los dos scripts anteriores.
leer.php
<? #Abrimos el fichero en modo lectura $DescriptorFichero = fopen("fichero_prueba.txt","r");
?>
Como véis, este script lee el fichero de texto línea a línea y lo va mostrando en el navegador. La función feof() devuelve TRUE cuando ha llegado al final del fichero. fgets(), va, pues, leyendo linea a linea y almacenándolo en una varible llamada $buffer.
Ahora vamos a ver como funcionan los modos w+, r+ y a+. Veréis que son diferentes de los anteriores en el sentido de que permiten dos operaciones, y tambien en el sentido de como tratan los ficheros. Empezaremos con w+. El siguiente script explica qué es lo que hace este modo con los ficheros. leer_wplus.php
<? #Abrimos el fichero en modo w+ $Descriptor1 = fopen("nuevo_fichero.txt","w+");
?>
Como véis, al ejecutarlo, el resultado es el siguiente:
Esta es la tercera línea de texto Esta es la cuarta línea de texto
¿Por qué no aparecen la primera y la segunda línea escritas? Observemos lo que hemos hecho. Primero abrimos el fichero y escribimos dentro de él dos líneas de texto. Tras esto, lo cerramos y lo volvemos a abrir, en modo w+. Este modo BORRA EL CONTENIDO ANTERIOR del fichero, por lo que en este solo aparecen las dos últimas líneas. Como véis, se puede utilizar este modo para leer desde el fichero con fgets().
Ahora vamos a ver un ejemplo con r+. Vamos a crear un script que haga lo mismo que el anteriro, pero en vez de abrir los ficheros con w+, los abrirá con r+.
leer_rplus.php
<? #Abrimos el fichero en modo w+ $Descriptor1 = fopen("nuevo_fichero.txt","w");
?>
Si ejecutáis el script, quizás observéis, sorprendidos, que el resultado es el mismo que en el anterior. Pero lo que ha sucedido, en cambio, no es lo mismo. Vamos a anlizarlo por partes. Primero, hemos abierto el fichero en modo w (escritura), para meter dos líneas en el fichero. Tras esto, lo cerramos, y lo abrimos en modo r+ (lectura/escritura). Al abrirlo de este modo, el cursor se sitúa al principio del fichero, por lo que al escribir las siguientes dos líneas, borra el contenido de las dos líneas anteriroes.. Antes de mostrar el contenido del fichero usamos la función rewind(), que rebobina el cursor hasta el principio del fichero. Para añadir al final de fichero, necesitamos el modo a+, como veremos en el siguiente ejemplo.
leer_aplus.php
<? #Abrimos el fichero en modo w+ $Descriptor1 = fopen("nuevo_fichero.txt","w+");
?>
El resultado de este método es el esperado. Se abre el fichero en modo escritura y se insertan las dos líneas de texto. Se cierra este descriptor, y se abre otro en modo a+. El cursor se sitúa al final del fichero, y comienza a añadir el texto. El resultado son las cuatro líneas dentro del fichero de texto. Esto es todo en cuanto a modos de apertura. En la siguiente sección vamos a ver como subir ficheros al servidor, algo muy útil cuando se trata de páginas web.
Subir ficheros al servidor
Para ejemplificar la subida de archivos al servidor, vamos a ver un script de ejemplo. El script tiene dos partes; la primera, el formulario, en el que se introduce el fichero a cargar, y la segunda parte, en la que se procesa la subida y se informa al usuario del éxito o fracaso de la carga. upload.php
<? if(!isset($cargar)){ ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">