10-Entrada y salida en PHP

Las operaciones de entrada/salida en PHP tienen una gran importancia en cualquier lenguaje de programacion ya que no tiene sentido que un lenguaje de programacion no pueda escribir,leer,actualizar datos de una base de datos,etc. En este capitulo nos centraremos basicamente en las operaciones de entrada y salida con archivos y posteriormente explicaremos las operaciones con bases de datos.

Supongamos que deseamos hacer una tienda de compra online, imaginemos el gran esfuerzo que supondria tener que modificar todas las paginas HTML de aquellos productos en los cuales en la temporada de oferta su precio se viera afectado. La solucion mas primitiva para el almacenamiento de datos es un fichero de texto, el contenido del fichero de texto puede ser cualquiera.

¿Como abrimos un fichero?

Para abrir un fichero PHP pone a disposicion una funcion.Su sintaxis es la siguiente:
fopen(fichero,modo); la ruta del fichero se indica en fichero :P y modo determina los diferentes modos de lectura de un archivo:

Atributo
Efecto
r
Solo lectura
r+
Lectura y escritura
w
Solo escritura.Borra el contenido anterior
w+
Lectura y escritura.Borra el contenido anterior.
a
Solo escritura.Conserva el contenido anterior.
a+
Lectura y escritura.Conserva el contenido anterior

¿Como se recorre un fichero?

Para leer un fichero logicamente la operacion es muy sencilla(consiste en ir leyendo todos los caracteres hasta llegar al EOF(end of file... final del archivo) el cual determina el final del texto). Al igual que en las matrices los ficheros poseen un cursor interno que indica su posicion actual con respecto a todo el texto. Para comprobar si se ha llegado al final del archivo PHP pone a nuestra disposicion de la funcion feof(fichero); que se encarga de comprobar si la posicion actual del fichero es la marca del final. La funcion mas generica de lectura es fread(fichero,nº_bytes); que se encarga de leer un numero determinado de bytes del fichero y delvolvernoslo en una cadena de caracteres, en cambio, si lo que pretendemos es leer el fichero caracter a caracter debemos usar la funcion fgetc(fichero); . Otras de las funciones mas caracteristicas son: fgets(fichero,nº bytes); que nos devuelve una cadena de caracteres con la informacion leida. fgetss(fichero,nº bytes,[mostrar_tags]); nos lee un fichero HTML omitiendo las etiquetas caracteristicas del codigo, en mostrar tags debemos introducir las etiquetas que deseamos que se muestren.

Si al realizar la lectura lo que se pretenden leer los valores que siguen un determinado formato de entrada nos podemos ahorrar un gran trabajo usando la funcion fscanf(fichero,formato,variables); esta funcion obtiene los datos de entrada de un fichero siguiendo un formato determinado, posteriormente dicha informacion debe ser tratada por el programador.
La ultima funcion que vamos a estudiar para abrir ficheros es la funcion file(nombre_fichero); con esta funcion no es necesario usar las funciones fopen() y fclose() ya que se ejecutan de forma implicita.

¿Como se cierra un fichero?

Cerrar es la ultima operacion que se debe realizar al manipular un fichero y permite cerrar la referencia que se hace al fichero en el script ejecutado. Para poder cerrar un fichero usamos la funcion fclose(fichero);

Escritura en ficheros

Para escribir en un fichero basicamente debemos realizar tres operaciones: abrir el fichero en modo escritura, realizar la operacion de escritura realizada, cerrar el fichero. Las funciones que empleamos para escribir en un fichero son fputs(fichero,cadena); y fwrite(fichero,cadena); que nos permiten añadir una cadena de caracteres al texto anterior contenido en el texto.

Acceso directo en ficheros

Existen un conjunto de funciones que nos permiten situarnos en una determinada posicion del fichero para leer a partir de ahi.
La funcion fseek(fichero,posicion); Nos permite empezar a leer un fichero a partir de una posicion segun se determine: seek_set(se toma con el principio del fichero),seek_cur(posicion actual),seek_end(posicion final).

Existen dos funciones basicas que nos posicionan al principio del fichero -> rewind(fichero); o que nos devuelven el valor actual de la posicion-> ftell(fichero);

Funciones variadas para el manejo de ficheros

fpassthru(fichero); Nos muestra el contenido referenciado por manejador de fichero.Devuelve el numero de bytes mostrados si no se produce ningun fallo.
set_file_buffer(fichero,tamaño); Determina el tamaño del buffer de ese archivo que usara PHP
readfile(fichero); Lee un fichero y lo muestra por el metodo de salida estandar