Está en la página 1de 30

U.T.

8: Recuperacin y
utilizacin de informacin.

Ficheros
y
Directorios

PHP permite guardar y recuperar informacin a travs de los ficheros,


para lo cual dispone de funciones y procedimientos para acceder a los
mismos y a su informacin, as como para crearlos, destruirlos, modificar
su contenido, PHP tambin puede tratar carpetas o directorios.

Un fichero
Es un almacn de datos en dispositivos externos
Convierte los datos en persistentes al final de los programas

Tipos de ficheros:
TEXTOS:

La informacin se almacena en ASCII, es legible mediante editores, los


datos requieren separadores ( , \n, \t,\r\n)

BINARIOS:

La informacin es binaria, NO es legible mediante editores, los datos NO


requieren separadores

Ficheros y Directorios
Las operaciones sobre ficheros suelen constar de tres

fases:

Apertura del fichero

Se abre el fichero, indicando si se realizarn operaciones para


leer, escribir o aadir al final del mismo.
La operacin devuelve un descriptor de fichero que se usar en
el resto de funciones.

Procesamiento del fichero

Lectura
Escritura.

Cierre del fichero.

Ficheros y Directorios

Se puede comprobar si el fichero existe


file_exists()

Determina si existe un archivo o directorio

Ficheros y Directorios: Apertura y cierre.

Apertura fopen()
nombre_fichero:

fopen( nombre_fichero, modo, include_path)

local o remoto (http:// o ftp://)

modo:

r abre el archivo en modo slo lectura, colocando el puntero del archivo al


principio del mismo. El archivo debe existir.
r+ abre el archivo en modo lectura y escritura, colocando el puntero del archivo
al principio del mismo.
w abre el archivo en modo slo escritura, colocando el puntero del archivo al
principio del mismo. Si el archivo no existe, lo crea, y si existe, su contenido ser
borrado.
w+ abre el archivo en modo escritura y lectura. Si el archivo no existe, lo crea, y
si existe, su contenido ser borrado.
a abre el archivo en modo slo escritura, colocando el puntero del archivo al
final del mismo; si el archivo no existe ser creado.
a+ abre el archivo en modo de agregar informacin y adems leerlo. Los datos
que se ingresen se agregarn al final del mismo, sin eliminar el contenido que
tuviera. En este modo, si el archivo no existe, lo crear en ese momento.
x, x+ Igual que w, w+ pero evitando la creacin si el fichero existe.
c, c+ Igual que w , w+ pero sin truncar el fichero cuando ya existe.

http://es.php.net/manual/es/function.fopen.php

Ficheros y Directorios: Apertura y cierre.


Nota:

Diferentes familias de sistemas operativos tienen diferentes convenciones para el final de


lnea. Cuando escribe un fichero de texto y quiere insertar un salto de lnea, necesita usar el
carcter o caracteres correctos de final de lnea para su sistema operativo. Los sistemas
basados en Unix usan \n como el carcter de final de lnea, los sistemas basados en Windows
usan \r\n como caracteres de final de lnea y los sistemas basados en Macintosh usan \r como
carcter de final de lnea.
Si usa los caracteres de final de lnea errneos cuando escribe sus ficheros, se podr
encontrar con que otras aplicaciones que abran esos ficheros "parecern raras".
Windows ofrece una bandera de traduccin en modo texto ('t') que traducir de manera
transparente \n a \r\n cuando se trabaja con el fichero. En contraste, puede usar 'b' para
forzar el modo binario, lo cual no traducir su informacin. Para usar estas banderas,
especifique 'b' o 't' como el ltimo carcter del parmetro mode.
El modo de traduccin predeterminado depende de la SAPI y de la versin de PHP que est
usando, por lo que se le anima a especificar siempre la bandera apropiada por razones de
portabilidad. Debera usar el modo 't' si est trabajando con ficheros de texto plano y usa \n
para delimitar los finales de lnea en su script, pero confe que sus ficheros sern legibles por
aplicaciones tales como notepad. Debera usar 'b' en los dems casos.
Si no especifica la bandera 'b' cuando est trabajando con ficheros binarios, puede
experimentar problemas extraos con su informacin, incluidos ficheros imagen rotos o
problemas extraos con los caracteres \r\n.

Ficheros y Directorios: Apertura y cierre.


Include_path

especifica la lista de directorios


funcionesrequire,include,fopen(),file(),readfile()y
file_get_contents()buscarn ficheros.

donde

las

Include_path = true -> el fichero debe buscarse en las rutas


establecidas en la directiva include_path de php.ini.

Ejemplo en Windows:
Ejemplo en Unix:

include_path=".;c:\php\includes"

include_path=".:/php/includes

fopen()
Permite abrir un fichero para trabajar con l. Al ejecutarse,
comprueba si el fichero existe.
Devuelve un identificador que se emplea en el resto de funciones
(o FALSE en caso de error)

Ficheros y Directorios: Apertura y cierre.


Para qu sirve el puntero que devuelve fopen()?
Define un canal a travs del cual se accede al fichero.
Desde que el fichero est abierto se trabaja con el puntero.
Cuando se abre el fichero, el puntero se coloca al principio del
fichero para esperar instrucciones.
Ejemplos:
Apertura para lectura
$fichero = fopen("datos.txt", 'rb');
Apertura para escritura silenciando errores con @ (Si la apertura
falla, se genera un error de nivel E_WARNING. Se usa @ para suprimir
esta advertencia.)

$fichero = @fopen("datos.txt", 'wb');


Apertura para aadir, silenciando errores

$fichero = @fopen("datos.txt", 'ab');

Ficheros y Directorios: Apertura y cierre.


Ms ejemplos:
$gestor=fopen("/home/rasmus/fichero.txt","r");
$gestor=fopen("/home/rasmus/fichero.gif","wb");
$gestor=fopen("http://www.example.com/","r");
Se abre una conexin hacia la web especificada. Siempre debe
ponerse una barra (/) al final.
$gestor=fopen("ftp://user:password@example.com/fichero.txt

","w"); Se abre una conexin al servidor especificado.

PHP incorpora una serie envolturas para distintos protocolos tipo URL
para trabajar junto con funciones del sistema de ficheros, como
fopen(),copy(),file_exists()yfilesize()
La sintaxis de URL que se utiliza para describir una envoltura es:

scheme://.... (file://..., http://..., ftp://..., )

Ficheros y Directorios: Apertura y cierre.

Ficheros y Directorios: Apertura y cierre.

Ficheros y Directorios: Apertura y cierre.


Para verificar que la operacin fopen() ha tenido xito:
Apertura para lectura silenciando errores con el operador @
$fichero = @fopen("datos.txt", 'r');
Si no se ha podido abrir el fichero finaliza la ejecucin del script

devolviendo un mensaje de error:

if (!$fichero)
die("ERROR: no se ha podido abrir el fichero de datos");

die()

-> Provoca la finalizacin de la ejecucin del script


mostrando el mensaje recibido como parmetro
En caso contrario el script contina ejecutndose.
Cierre fclose()

fclose(identifcador)

Ficheros y Directorios: Apertura y cierre.

Ficheros y Directorios: Apertura y cierre.

Ficheros y Directorios: Apertura y cierre.


w abre el archivo en modo slo escritura, colocando el
puntero del archivo al principio del mismo. Si el archivo
no existe, lo crea, y si existe su contenido ser borrado

Ficheros y Directorios: Procesamiento de


ficheros.

Leer
string fgets ($puntero, [bytes])

Obtiene una lnea desde el puntero del fichero


Se termina de leer cuando llega al final de lnea, final del fichero o el
ltimo byte de datos (lo que suceda primero).
byte indica cuantos bytes (caracteres) queremos leer del fichero
(opcional)

string fread ($puntero, longitud)

Devuelve una cadena de texto con el contenido ledo desde el archivo


Es similar a fgets( ), pero se lee todo el fichero o hasta el carcter
longitud, que indica el nmero de bytes que se deben leer (lo que
suceda primero).

Ficheros y Directorios: Procesamiento de ficheros.

Ficheros y Directorios: Procesamiento de ficheros.

Leer todo el contenido y almacenar cada lnea en una posicin

del array que devuelve.

file (nombre_fichero)

Leer todo el contenido y devolverlo en un string. Se le puede

indicar la posicin inicial a partir de la que desemos extraer el


texto (comenzando desde cero), y el nmero de caracteres a
obtener.
file_get_contents (nombre_fichero[, use_include_path,

contexto de flujo, posicin_inicial, num_caracteres])

Ficheros y Directorios: Procesamiento de ficheros

Ficheros y Directorios: Procesamiento de ficheros.

Escribir (w a )
fwrite( $fichero, cadena[, longitud])

Escribe en $fichero los caracteres de cadena.


Si se aade el parmetro longitud, escribe hasta que termine la cadena o hasta
que se alcancen los caracteres indicados en este parmetro, lo que antes
ocurra.
Devuelve el nmero de caracteres escrito

fputs es una alias de fwrite.


Cuando se escribe en un archivo los datos previamente son almacenados

en un buffer de escritura (espacio en memoria RAM). El tamao del


buffer suele ser de 8K, y tal y como indica el manual de PHP.

Con la funcin de PHP set_file_buffer() es posible definir el tamao del buffer.


Usando la funcin fflush() podemos forzar que se escriban en el archivo los

cambios pendientes en el buffer de escritura. Cuando se llama a fclose() se


escribirn tambin los cambios pendientes.

Ficheros y Directorios: Procesamiento de ficheros.


w+ abre el archivo en modo
escritura y lectura. Si el
archivo no existe, lo crea, y
si existe, su contenido ser
borrado.

Ficheros y Directorios: Procesamiento de ficheros.


a+ abre el archivo en modo de agregar
informacin y adems leerlo. Los datos que se
ingresen se agregarn al final del mismo, sin
eliminar el contenido que tuviera. En este modo, si
el archivo no existe, lo crear en ese momento.

Ficheros y Directorios: Procesamiento de ficheros.


Creacin y apertura para lectura y escritura;
coloca el puntero del fichero al principio del
mismo. Si el fichero ya existe, la llamada
afopen()fallar devolviendoFALSEy
generando un error de nivelE_WARNING. Si
el fichero no existe se intenta crear.

Ficheros y Directorios: Procesamiento de ficheros.


Silenciando errores con @ (Si la apertura
falla, se genera un error de nivel
E_WARNING. Se usa @ para suprimir esta
advertencia.)

Ficheros y Directorios: Procesamiento de ficheros.


Creacin y apertura para lectura y escritura;
coloca el puntero del fichero al principio del
mismo. Si el fichero ya existe, no es
truncado ni la llamada a la funcin falla. Si el
fichero no existe se crea.

Ficheros y Directorios: Procesamiento de ficheros.

Escribir
Tambin podemos insertar texto en un archivo a partir de una cadena de
texto usando la funcin de PHP:
file_put_contents().

feof(identificador) (TRUE -> fin, FALSE -> no fin)


Verifica el final de fichero.
rewind( identificador)

Permite colocar el puntero al principio del fichero.


ftell( identificador)

Devuelve la posicin actual del puntero al archivo dentro del


mismo.

Ficheros y Directorios: Procesamiento de ficheros.

Ficheros y Directorios: Procesamiento de ficheros.

Otras operaciones:
fgetss()

Idntica a fgets con la diferencia de que los caracteres html encontrados


son eliminados del archivo a medida que se lee el mismo.
Opcionalmente puede pasarse una lista de tags que no deben ser
eliminados.
Lee una lnea (de cualquier longitud) eliminando los tags html excepto
los indicados como segundo parmetro. Los tags que cierran stos
tampoco son eliminados. (</td>,..)

readfile(path)

Lee un fichero y lo escribe en el buffer de salida.

Ficheros y Directorios: Procesamiento de


ficheros.

Ficheros y Directorios: Procesamiento de


ficheros.