Administración de Archivos


 

Abrir Archivos

Para abrir archivos, se utiliza la función fopen, cuya sintaxis es la siguiente:

fopen (nombre_archivo, modo);

En donde:
nombre_archivo: el nombre del archivo que se quiere abrir o crear.
modo: indica de que forma se procederá a la apertura del archivo. Los distintos modos se comentan en los ejemplos siguientes:

fopen (archivo.txt, a)
Abre el archivo en modo de agregar información. Los datos que se ingresen se agregarán al final del mismo, sin eliminar el contenido que tuviera. En este modo, si el archivo no existe, lo creará en ese momento.

fopen (archivo.txt, a+)
Abre el archivo en modo de agregar información y además leerlo. Los datos que se ingresen se agregarán al final del mismo, sin eliminar el contenido que tuviera. En este modo, si el archivo no existe, lo creará en ese momento.

fopen (archivo.txt, r)
Abre el archivo en modo lectura solamente. El archivo debe existir.

fopen (archivo.txt, r+)
Abre el archivo en modo lectura y escritura. La información que se agregue, será insertada al principio del archivo.

fopen (archivo.txt, w)
Abre el archivo en modo escritura solamente. Si el archivo no existe, lo crea, y si existe con algún contenido, elimina toda su información, dejándolo en blanco.

fopen (archivo.txt, w+)
Abre el archivo en modo escritura y lectura. Si el archivo no existe, lo crea, y si existe con algún contenido, elimina toda su información, dejándolo en blanco.

 

Cerrar Archivos

Luego de abrir un archivo y realizar las operaciones necesarias en él, se debe cerrarlo. Para cerrar un archivo se utiliza la función fclose() que recibe como parámetro la variable del archivo que se está utilizando.

Ejemplo:

$f = fopen("archi.txt", r);
fclose($f);


Escritura en un Archivo

Para guardar información en un archivo de texto se utilizan las funciones fputs() y fwrite(), que se detallan a continuación:

Función fputs()

Permite escribir en un archivo. Recibe tres parámetros, de los cuales los dos primeros son obligatorios y el tercero es opcional. La sintaxis es la siguiente:

fputs ( variable_fichero, texto, largo)

El primer parámetro es el puntero al archivo, es decir la variable de trabajo.
El segundo parámetro es el texto que se desea escribir.
El tercer parámetro es el largo de la cadena, si no se coloca, se grabará la cadena entera.

Ejemplo 1:
El siguiente ejemplo muestra un pequeño programa que graba una cadena de texto en un archivo llamado Texto1.txt.

<Htm>
 <Title>  Ejemplo01-Fputs.php  </Title>
<Body> 
<?Php
  $Texto="La materia se transforma consumiendo o liberando energía.";
  $f = fopen("Texto1.txt",w);
  fputs($f, $Texto);
  echo "Texto almacenado correctamente";
  fclose($f);
 ?>
</Body>
</Htm>

Al mismo resultado se hubiera llegado utilizando la función fwrite(), es decir, si en el ejemplo anterior se reemplaza fputs() por fwrite(), el resutado del programa no se alteraría.

Lectura de un Archivo

Para poder ver el contenido de un archivo de texto se pueden utilizar varias funciones:

Función fpassthru()
                        Permite ver el contenido completo de un archivo. Tiene como parámetro la variable archivo utilizada para abrirlo.

Ejemplo 2:

El siguiente ejemplo lee el archivo de texto grabado en el ejemplo 1.
<Htm>
 <Title>  Ejemplo02-Fpassthu.php  </Title>
<Body>

 <?Php
  $nombre="Texto1.txt";
  $f = @fopen($nombre,r) or die("Error al abrir el archivo: $nombre");
  echo "Texto:" . "<Br>";
  fpassthru($f);
  echo "<Br><Br>";
  echo "El texto se ha leído correctamente";
  fclose($f);
 ?>

</Body>
</Htm>
 
En primera instancia, se abre el archivo en modo lectura (r) y se utiliza la instrucción die() para poder imprimir un mensaje de error cuando el fichero a leer no exista. Con la instrucción fpassthru() se lee y se muestra el archivo.

Función fread()
            Permite leer parte de un archivo abierto. Esta función tiene dos parámetros y su sintaxis es la siguiente:

fread(variable_fichero, cantidad);

variable_fichero: es el puntero al archivo abierto de trabajo.
cantidad: es la cantidad de caracteres que se pretende leer.

Ejemplo 3:
En el próximo ejemplo se leen los primeros 24 caracteres del texto grabado en el ejemplo 1.

<Htm>
 <Title>  Ejemplo03-Fread.php  </Title>
<Body>
 <?Php
  $nombre="Texto1.txt";
  $f = @fopen($nombre,r) or die("Error al abrir el archivo: $nombre");
  echo "<H3>";
  echo "Texto leido:" . "<Br>";
  echo fread($f,24);
  echo "<Br><Br>";
  echo "Se han leído los 24 primeros caracteres";
  fclose($f);
 ?>
</Body>
</Htm>

Función fgetc()
            Permite leer un archivo de texto carácter por carácter, también se puede recorrer el archivo parcial o totalmente.

Ejemplo 4:
En este ejemplo se lee el archivo completo utilizando la función fgetc(), mediante un ciclo leyendo carácter por carácter.

<Htm>
 <Title>  Ejemplo04-Getc.php  </Title>
<Body>
 <?Php
  $nombre="Texto1.txt";
  $f = @fopen($nombre,r) or
       die("Error al abrir el archivo: $nombre");
  echo "<H3>";
  echo "Texto leido:" . "<Br>";
  while (!feof($f))
   {
    echo fgetc($f);
   }
  echo "<Br><Br>";
  echo "Texto leído completamente";
  fclose($f);
 ?>
</Body>
</Htm>

Para el ciclo se utilizó la estructura while(), que tiene como condición a la función feof(). Esta función significa fin de fichero (end of file), y se encarga de indicar si se llegó al final del archivo o no. En el ejemplo, la función está negada con el símbolo de admiración delante, por lo tanto, la línea se lee de la siguiente manera: 
Mientras no sea el fin del fichero, procese.
Lo que procesará será la función fgetc(), que leerá caracteres hasta que se termine en archivo, saliendo del ciclo while().
El resultado de este ejemplo es el siguiente:

Función fgets()
Permite leer una cadena de texto de un archivo, tiene dos parámetros y su sintaxis es la siguiente:

fgets (variableFichero, longitud);

variable_Fichero: es el puntero al archivo abierto de trabajo.
longitud: Es opcional, y es la cantidad de caracteres – 1, que se pretende leer. Es decir que si se pretende leer 24 caracteres por ejemplo, la longitud debería ser de 25.

Ejemplo 5:

<Htm>
 <Title>  Ejemplo05-Fgets.php  </Title>
<Body>
<?Php
  $nombre="Texto1.txt";
  $f = @fopen($nombre,r) or
       die("Error al abrir el archivo: $nombre");
  echo "<H3>";
  echo "Texto leido:" . "<Br>";
  echo fgets($f,25);
  fclose($f);
 ?>
</Body>
</Htm>

Función file()
Esta función permite almacenar un texto en un vector. El almacenamiento se producirá línea por línea, es decir que cada elemento del vector contendrá una línea de texto.

Ejemplo 6:
Guardar en un archivo, un determinado texto y posteriormente almacenarlo línea por línea en un vector.

<Htm>
 <Title>  Ejemplo06-File.php  </Title>
<Body>
 <?Php
  // Almacenamiento del Texto

  $Texto="En el universo hay materia y energía,
 la materia se halla en ciertos cuerpos
 llamados cuerpos celestes.
 Algunos cuerpos son frios y no emiten energía,
 otros son calientes y emiten luz y calor.";

  $f = fopen("Texto2.txt",w);
  fwrite($f, $Texto);
  fclose($f);

  // Generación del vector

  $nombre="Texto2.txt";
  $f = @fopen($nombre,r) or die("Error al abrir el archivo: $nombre");
  fclose($f);
  $v = file($nombre);
  $cantidad = count($v);
  echo "<H3>";
  echo "Vector Generado:" . "<Br>";
  for ($i=0; $i<$cantidad; $i++)
   {
    echo "Posición [$i]: $v[$i]" . "<Br>";
   }
 ?>
</Body>
</Htm>

 Recorrido de un Archivo
Las siguientes funciones muestran como se posiciona en el archivo en un lugar determinado, leer una porción de texto y tomar la posición de donde se encuentra el puntero en el archivo.

Función rewind()
            La función rewind() mueve el puntero al inicio del archivo. Recibe como parámetro a la variable fichero que se abrió previamente.

Función fseek()
            La función fseek() permite situar el puntero en un lugar específico. Tiene dos parámetros, el primero es la variable fichero, y el segundo es el número de carácter donde se quiere posicionar. (Tener presente de que el primer carácter es el número 0).

Ejemplo 7:
El siguiente ejemplo, se posiciona en el carácter número 19 y lee los 18 caracteres siguientes del Texto2.txt, luego en el próximo renglón, se posiciona en el carácter número 15 y lee los siguientes 4 caracteres y por último, se posiciona al principio con la función rewind() y se leen los primeros 14 caracteres.

<Htm>
 <Title>  Ejemplo07-Fseek.php  </Title>
<Body>
 <?Php
  $nombre="Texto2.txt";
  $f = @fopen($nombre,r) or die("Error al abrir el archivo: $nombre");

  echo "<H3>";
  fseek($f, 19);
  echo fread($f, 18);
  echo "<Br>";
  fseek($f, 15);
  echo fread($f, 4);
  echo "<Br>";
  rewind($f);
  echo fread($f, 14);

  fclose($f);
 ?>
</Body>
</Htm>


Función ftell()
            Permite obtener la posición de donde está el puntero en el archivo. Recibe como parámetro la variable fichero y devuelve el valor numérico de la posición en que está el puntero.

Ejemplo 8:
                 Leer un archivo y mostrar la posiciones de cada uno de los caracteres que lo constituyen.

<Htm>
 <Title>  Ejjemplo08-Ftell.php  </Title>
<Body>
 <?Php
  $nombre="Texto1.txt";
  $f = @fopen($nombre,r) or
       die("Error al abrir el archivo: $nombre");
  echo "<H3>";
  echo "Archivo: ";
  echo fgets($f);
  echo "<Br>";
  rewind($f);
  while (!feof($f))
   {
     echo " Posición (" . ftell($f) . ") : ";
     echo fgetc($f);
     echo "<Br>";
   }
  fclose($f);
 ?>
</Body>
</Htm>

Funciones Útiles para el manejo de Archivos
Se describen a continuación funciones útiles para el manejo de archivos, entre ellas se verá como copiar, renombrar y obtener información de los archivos almacenados.

Función copy()
            Esta función permite realizar una copia de un archivo determinado. Necesita dos parámetros, que son: el nombre del archivo origen y el nombre del archivo destino. Si la copia se realiza con éxito devuelve verdadero, de lo contrario devuelve falso.

Ejemplo 9:
Realizar una copia del archivo Texto1.txt en el archivo Texto1.bak.

<Htm>
 <Title>  Ejemplo09-Copy.php  </Title>
<Body>
 <?Php
  $origen="Texto1.txt";
  $f = @fopen($origen,r) or die("Error al abrir el archivo: $origen");
  echo "<H3>";
  echo "Archivo: ";
  echo fgets($f);
  echo "<Br>";
  fclose($f);
  $destino="Texto1.bak";
  if (copy($origen, $destino))
   {
    echo "La copia se realizó con éxito";
   }
   else
   {
    echo "No se pudo realizar la copia";
   }
 ?>
</Body>
</Htm>

Función file_exists()
            La función file_exists() permite determinar la existencia o no del archivo pasado como parámetro. Devuelve verdadero en caso de existir el archivo, en caso contrario devuelve falso. Generalmente se utiliza esta función cuando se pretende borrar el archivo, renombrarlo o simplemente abrirlo.

Ejemplo 10:
Verificar si el archivo Texto1.txt existe o no.

<Htm>
 <Title>  Ejemplo10-File_Exists.php  </Title>
<Body>
 <?Php
   $nombre="Texto1.txt";
   if (file_exists($nombre))
    {
     echo "El $nombre existe";
    }
    else
    {
     echo "El $nombre no existe";
    }
 ?>
</Body>
</Htm>

Función rename()
            Permite cambiar el nombre a un archivo. Acepta dos parámetros, el primero es el nombre actual del archivo y el segundo es el nombre nuevo que se le quiere dar.

Ejemplo 11:
            Cambiar el nombre del archivo Texto1.bak por Archi1.txt.

<Htm>
 <Title>  Ejemplo11-Rename.php  </Title>
<Body>
 <?Php
   $nombreActual="Texto1.bak";
   $nombreNuevo ="Archi1.txt";
   if (file_exists($nombreActual))
    {
     rename($nombreActual, $nombreNuevo);
     echo "El nombre se cambió correctamente";
    }
    else
    {
     echo "No se encontro el archivo $nombreActual";
    }
 ?>
</Body>
</Htm>

Función unlink()
            Esta función se utiliza para borrar un archivo. Recibe como parámetro el nombre del archivo a borrar.

Ejemplo 12:
            Borrar el archivo Archi1.txt.

<Htm>
 <Title>  Ejemplo12-Unlink.php  </Title>
<Body>
 <?Php
   $nombre="Archi1.txt";
   if (file_exists($nombre))
    {
     unlink($nombre);
     echo "El archivo $nombre se borró correctamente";
    }
    else
    {
     echo "No se encontro el archivo $nombre";
    }
 ?>
</Body>
</Htm>

fileatime() y filemtime()
La función fileatime() devuelve la última fecha de acceso a un archivo determinado y la función filemtime(), devuelve la última fecha de modificación de un archivo. Ambas reciben como parámetro el nombre del archivo.

Ejemplo 13:
            Mostrar las últimas fechas de acceso y de modificación del archivo Texto2.txt.

<Htm>
 <Title>  Ejemplo13-Filetime.php  </Title>
<Body>
 <?Php
   $nombre="Texto2.txt";
   echo "<H3>";
   if (file_exists($nombre))
    {
     echo "Archivo: $nombre" ;
     echo "<Br><Br>";
     echo "Última fecha de acceso: ";
     echo date("d/m/Y",fileatime($nombre));
     echo "<Br><Br>";
     echo "Última fecha de modificación: ";
     echo date("d/m/Y",filemtime($nombre));
    }
    else
    {
     echo "No se encontro el archivo $nombre";
    }
 ?>
</Body>
</Htm>

En este ejemplo también se utilizó la función date(), que tiene por finalidad darle un formato a la fecha mostrada. Tiene dos parámetros, el primero es el formato y el segundo es un número entero, que en este caso es el valor devuelto por las funciones fileatime() y filemtime().

Función date()
            Permite darle un format a una fecha o a una hora. Su sintasix es la siguiente:

date( Formato, Fecha_Hora );

Las opciones de Formato que se pueden emplear, son las siguientes:

Opción

Formato

a

“am” o “pm”

A

“AM” o “PM”

d

Día del mes, 2 dígitos con ceros a la izquierda

D

Día de la semana en texto (Ingles) con 3 letras . Ej :  Fri

F

Mes en texto completo (Inglés). Ej : January

h

Hora de “01” a  “12”

H

Hora de “00” a  “23”

g

Hora sin ceros de “1” a  “12”

G

Hora sin ceros de “0” a  “23”

i

Minutos de “00” a  “59”

j

Día del mes sin cero de “1” a  “31”

l

Día de la semana en texto completo (Inglés). Ej: Friday

L

“1” o  “0” según el año sea bisiesto o no

m

Número de mes de “01” a  “12”

M

Mes en texto (Inglés) tres letras. Ej: Jan

s

Segundos de “00” a  “59”

S

Sufijo ordinal en Inglés en texto. Ej: “th”  o  “nd”

t

Número de días del mes dado de “28” a  “31”

U

Segundos

w

Día de la semana en número, de 0(Domingo) a 6(Sábado)

Y

Año cuatro cifras. Ejemplo: “2005”

y

Año dos cifras. Ejemplo: “05”

z

Día del año entre “0” y “365”

Z

Diferencia horaria en segundos (de “-43200”  a  “43200”


Ejemplo 14:
            Mostrar la fecha y la hora actual.

<Htm>
 <Title>  Ejemplo14-Date.php  </Title>
<Body>
 <?Php
   function nombreMes($m)
    {
     switch ($m)
      {
        case 1: return "Enero";
        case 2: return "Febrero";
        case 3: return "Marzo";
        case 4: return "Abril";
        case 5: return "Mayo";
        case 6: return "Junio";
        case 7: return "Julio";
        case 8: return "Agosto";
        case 9: return "Septiembre";
        case 10: return "Octubre";
        case 11: return "Noviembre";
        case 12: return "Diciembre";
      }
    }
   echo "<H3>";
   echo "La fecha actual en formato (dd/mm/aaaa) es: ";
   echo date("d/m/Y");
   echo "<Br><Br>";
   $dia = date("j");
   $mes = nombreMes(date("m"));
   $anio = date("Y");
   $fecha = $dia." de ".$mes." de ".$anio;
   echo "La fecha actual en formato literal es: " ;
   echo $fecha . "<Br><Br>";
   echo "La hora actual es: " . date("H:i:s  A");
   echo "<Br><Br>";
   echo "Han transcurrido: ";
   echo date("z"). " días del año " . date("Y");
 ?>
</Body>
</Htm>


Función filesize()
            Esta función devuelve el tamaño del archivo que se le pasa como parámetro. El valor devuelto es en cantidad de  caracteres.

Ejemplo 15:
                     Determinar la cantidad de caracteres que contiene el archivo llamado Texto1.txt.

<Htm>
 <Title>  Ejemplo15-Filesize.php  </Title>
<Body>
 <?Php
   $nombre="Texto1.txt"; echo "<H3>";
   if (file_exists($nombre))
    {
     echo "Tamaño de $nombre: ";
     echo filesize($nombre);
    }
    else
    {
     echo "No se encontro el archivo $nombre";
    }
 ?>
</Body>
</Htm>