x

x

Manejo de ficheros en PHP

PHP nos va a ofrecer un conjunto de funciones y procedimientos mediante los cuales podremos acceder a un fichero de texto para poder leerlo, modificarlo, añadir contenido o eliminarlo.
Cualquier operación que suponga el manejo de ficheros llevará tres operaciones asociadas:

■ La primera será la apertura del fichero, donde especificaremos el tipo de acción que vamos a realizar sobre dicho fichero.

■ La segunda será ejecutar la acción.

■ Por último, habrá que cerrar el fichero.

4.5.1. Abrir un fichero (FOPEN)

Para abrir un fichero utilizaremos la instrucción fopen(). Mediante esta función podremos abrir un fichero ya sea vía HTTP o FTP.
Su sintaxis será la siguiente:

fopen ( string $filename , string $mode [, bool $use_include_path = false ] )

$filename será el fichero que queramos abrir y tendrá que contener la ruta completa del archivo.

$mode tendrá que contener el modo de apertura para indicar la forma en la que queremos que el fichero sea abierto. Un archivo puede ser abierto con los siguientes modos:

  • ‘r’. Apertura para solo lectura; coloca el puntero al archivo al principio del archivo.
  • ‘r+’. Apertura para lectura y escritura; coloca el puntero al archivo al principio del archivo.
  • ‘w’. Apertura para solo escritura; coloca el puntero al archivo al principio del archivo y trunca el archivo a longitud cero. Si el archivo no existe, se intenta crear.
  • ‘w+’. Apertura para lectura y escritura; coloca el puntero al archivo al principio del archivo y trunca el archivo a longitud cero. Si el archivo no existe se intenta crear.
  • ‘a’. Apertura para solo escritura; coloca el puntero al archivo al final del archivo. Si el archivo no existe, se intenta crear.
  • ‘a+’. Apertura para lectura y escritura; coloca el puntero al archivo al final del archivo. Si el archivo no existe, se intenta crear.
  • ‘x’. Creación y apertura para solo escritura; coloca el puntero al archivo al principio del archivo. 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, se intenta crear.
  • ‘x+’. Creación y apertura para lectura y escritura; de otro modo tiene el mismo comportamiento que ‘x’.
  • ‘c’. Abrir el archivo para solo escritura. Si el archivo no existe, se crea. Si existe, no es truncado (a diferencia de ‘w’), ni la llamada a esta función falla (como en el caso con ‘x’). El puntero al archivo se posiciona en el principio del archivo. Esto puede ser útil si se desea obtener un bloqueo asistido (véase flock()) antes de intentar modificar el archivo, ya que al usar ‘w’ se podría truncar el archivo antes de haber obtenido el bloqueo (si se desea truncar el archivo, se puede usar ftruncate() después de solicitar el bloqueo).
  • ‘c+’. Abrir el archivo para lectura y escritura; de otro modo tiene el mismo comportamiento que ‘c’.

El tercer parámetro opcional $use_include_path puede ser establecido a ‘1’ o TRUE, si se desea buscar un archivo en include_path también. Para Linux, la ruta por defecto es include_path=”.:/php/includes” y para Windows la ruta por defecto es include_path=”.;c:\php\includes”.
Podemos utilizar también la función die() para que en el caso de que se haya producido un error en la apertura del fichero, se cierre la conexión y envíe un mensaje avisando del error. Veamos un ejemplo de ello:

<?php
$fichero=@fopen( "contador.txt", "r") 
or die("El fichero no ha podido ser abierto");
?>

Si observamos, hemos añadido delante de la instrucción fopen() el símbolo “@”. Con este símbolo nos aseguramos que no visualizará los mensajes de error del sistema, y solo mostrará el que nosotros especificamos en la función die().

La función fopen() devolverá un puntero al comienzo del archivo para que pueda ser utilizado, y lo tendremos que guardar en una variable $fichero=fopen(fichero,modo).

Por ejemplo, si quisiéramos abrir el fichero “contador.txt” en modo lectura y posteriormente en modo escritura, tendría que hacerse de la siguiente forma:

<?php
$fichero=@fopen( "contad2or.txt", "w"); 
//si el fichero no existe, lo intenta crear
?>

Cuando abrimos el fichero en modo escritura, no hace falta que incluyamos el mensaje de error, puesto que si el fichero no existe, será creado en ese mismo momento.

Cerrar un fichero (FCLOSE)

Una vez que hayamos todas las operaciones que necesitemos sobre un fichero, será siempre conveniente cerrarlo de forma correcta.

Para ello, utilizaremos la función fclose(). Si tenemos varios ficheros abiertos, y solo deseamos cerrar uno de ellos, le podremos pasar como argumento de la función la variable que contiene el apuntador de dicho
fichero. Veamos como cerrar el fichero abierto anteriormente:

<?php
$fichero=@fopen( "contador.txt", "r") 
or die("El fichero no ha podido ser abierto");
fclose($fichero);
?>

Leer un fichero (FGETS)

Con la función fgets() podremos leer cadenas de texto del fichero indicado.
Su sintaxis es la siguiente:

string fgets ($fichero [, int $longitud ] )

Mediante esta función podremos obtener un número de caracteres según especifiquemos en la variable $longitud. En realidad, esta variable tendrá un número cuyo valor será superior en 1 a los caracteres que finalmente serán mostrados en cada línea. La lectura de esta cadena acabará si el carácter de retorno de carro es encontrado o si se llega al final del archivo.

Si no especificamos una longitud, seguirá leyendo hasta que alcance el final de línea.

Veamos un ejemplo donde le especificaremos un parámetro de longitud:

<?php
$fichero = @fopen("contador.txt", "r") 
or die("El fichero no ha podido ser abierto");
if ($fichero) {
while (($linea = fgets($fichero, 5)) !== false) {
echo $linea;
echo "<br>";
}
fclose($fichero);
}

Supongamos que el fichero tiene el siguiente contenido:

hola, este es el contenido del archivo contador.txt

Tendríamos que obtener un resultado como el siguiente:

hola
, es
te e
s el
con
teni
do d
el a
rchi
vo c
onta
dor.
txt

Escribir un fichero (FPUTS)

Seguramente, la operación que más realicemos será la de escribir texto en los ficheros. Para ello utilizaremos la función fputs(), que tendrá la siguiente sintaxis:

int fputs ($fichero, string $cadena [, int $longitud ] )

Esta función escribirá el contenido de la variable $cadena en el archivo que esté apuntando el apuntador $fichero.

Si especificamos el parámetro opcional $longitud, el proceso de escritura se detendrá al haber escrito la cantidad de bytes especificados en dicha variable, a no ser que se llegue al final del fichero.

La función fputs() devolverá el número de bytes escritos, o el valor FALSE, si se produjo algún tipo de error en el proceso de escritura.

Veamos un ejemplo:

<?php
$fichero="contador.txt";
$cadena = "Estas palabras queremos añadir";
if ($apuntador= fopen($fichero,"a"))
{
fputs($apuntador,$cadena);
}
fclose($apuntador);