informaticaPC

Tutorial de PHP

Abrir y cerrar un archivo, desplazar el puntero de un archivo, insertar texto...

Manejo de archivos y carpetas en PHP

El lenguaje PHP dispone de una gran cantidad de funciones para realizar todo tipo de operaciones con archivos y carpetas, tanto básicas (como crear archivos y carpetas, modificar, eliminar...) como otras más avanzadas (para obtener y asignar permisos, crear enlaces símbólicos, etc.).

En esta sección si bien no explicaremos todas ellas, sí veremos cómo realizar algunas de las tareas que más usualmente se realizan sobre archivos y carpetas en PHP.

Información

Cada vez que se realiza una operación con las funciones de archivos que explicaremos a continuación, es recomendable comprobar si se ha realizado correctamente (mediante los valores que devuelven en caso de error).

Comprobar si existe un archivo o directorio

Si necesitamos averiguar si existe un archivo o carpeta utilizaremos la función de PHP file_exists(), la cual nos devolverá true si existe false en caso contrario:

<?php
    if( file_exists("datos.txt") == true )
        echo "<p>El archivo existe</p>";
    else
        echo "<p>El archivo no se ha encontrado</p>";


    if( file_exists("miCarpeta") == true )
        echo "<p>El directorio existe</p>";
    else
        echo "<p>El directorio no existe</p>";


    if( file_exists("./miCarpeta/") == true )
        echo "<p>El directorio existe</p>";
    else
        echo "<p>El directorio no existe</p>";
?>

Descargar ejemplo

Más información

Vea también: [ file_exists() ]

Obtener información de un archivo

Algunas funciones que nos devolverán información sobre un archivo son:

  • filesize(): devuelve el tamaño de un archivo en bytes.
  • filetype(): devuelve el tipo de fichero de que se trata: file, dir, block, char, fifo, link o unknown.
  • filemtime(): devuelve la fecha y hora de la última modificación del archivo, en formato UNIX Timestamp.
  • fileperms(): devuelve la mascara de permisos (en sistemas UNIX).
  • stat() y fstat(): devuelven información sobre un archivo abierto con fopen().

    La diferencia entre ellas es que a stat() se le pasa como parámetro el nombre del archivo, y a fstat() el recurso obtenido con fopen().

Otras funciones con las que podemos obtener información sobre los archivos son:

  • is_executable(): devuelve true si el archivo es ejecutable.
  • is_readable(): comprueba si existe un archivo se puede leer.
  • is_writable(): comprueba si existe un archivo y se puede escribir en él.
  • is_file(): indica si el nombre pasado como parámetro es un archivo.
  • is_link(): indica si el nombre pasado como parámetro es un enlace simbólico.
  • is_dir(): indica si el nombre pasado como parámetro es un directorio.
Más información

Vea también: [ filesize() ] - [ filetype() ] - [ filemtime() ] - [ fileperms() ] - [ fstat() ] - [ stat() ]

Más información

Vea también: [ is_executable() ] - [ is_readable() ] - [ is_writable() ] - [ is_file() ] - [ is_link() ] - [ is_dir() ]

Crear, abrir y cerrar un archivo en PHP

Para crear un archivo en PHP usaremos la función fopen() indicando el nombre del mismo como primer parámetro (pudiendo indicar la ruta) y el modo de creación en el segundo, pudiendo ser:

  • r: abre el archivo en modo sólo lectura, colocando el puntero del archivo al principio del mismo.
  • r+: apertura en modo lectura y escritura, colocando el puntero del archivo al principio del mismo.
  • w: apertura del archivo en modo sólo escritura, colocando el puntero del archivo al principio del mismo: si el archivo no existe se creará, y si existe su contenido será borrado.
  • w+: Lo mismo que el anterior pero abre el archivo en modo lectura y escritura.
  • a: abre el archivo en modo sólo escritura, colocando el puntero del archivo al final del mismo: si el archivo no existe será creado.
  • a+: Lo mismo que el anterior pero abre el archivo en modo lectura y escritura.
  • x: abre el archivo en modo sólo escritura, quedando el puntero del archivo al principio del mismo: si el archivo no existía se crea, y si existía se devolverá false generándose también un error de tipo E_WARNING.
  • x+: igual que la opción anterior pero abre el archivo en modo lectura y escritura.
  • c: abre el archivo en modo sólo escritura, quedando el puntero del archivo al principio del mismo: si el archivo no existía se creará. Si existe no se eliminará su contenido (como sucede con w) ni se devolverá un error (como con x).
  • c+: lo mismo que la opción anterior pero crea y abre el archivo en modo lectura y escritura.

IMPORTANTE: los sistemas Windows usan \r\n como caracteres de final de línea, los basados en UNIX usan \n y los sistemas basados en sistemas MACintosh usan \r: para evitar incompatibilidades es recomendable usar el modificador b.

Una vez hayamos terminado de realizar las operaciones deseadas con el archivo es necesario cerrarlo usando la función fclose(), que escribirá en él los cambios pendientes en el buffer (memoria en la que se guardan los datos antes de ir escribiéndolos).

Como puedes ver en el siguiente ejemplo, fopen() nos devuelve un puntero al archivo:

<?php
    $archivo = fopen("datos.txt", "w+b");    // Abrir el archivo, creándolo si no existe

    if( $archivo == false )
      echo "Error al crear el archivo";
    else
      echo "El archivo ha sido creado";

    fclose($archivo);   // Cerrar el archivo
?>

Descargar ejemplo

Información

Los archivos son creados en el servidor web.

Más información

Vea también: [ fopen() ] - [ fclose() ]

Desplazamiento dentro de un archivo

Algunas funciones de PHP que debes conocer puesto que te resultarán útiles para averiguar la posición del puntero a un archivo así como para desplazarlo dentro del mismo, son:

  • rewind(): situa el puntero del archivo al principio del mismo
  • ftell(): nos devolverá la posición actual del puntero al archivo dentro del mismo.
  • fseek(): nos permite desplazarlo hacia una posición exacta.
  • feof(): informa de si el puntero al archivo se encuentra al final del mismo.

Algunas de ellas las usaremos en los siguientes apartados.

Más información

Vea también: [ rewind() ] - [ ftell() ] - [ fseek() ] - [ feof() ]

Insertar texto en un archivo

Para insertar texto en un archivo usaremos las funciones fwrite() o fputs(), las cuales devolverán false en caso de error.

Cuando se escribe en un archivo los datos previamente son almacenados en un buffer de escritura (espacio en memoria RAM). El tamaño del buffer suele ser de 8K, y tal y como indica el manual de PHP:

Si hay dos procesos esperando a escribir en un archivo, cada uno se pausará después de escribir 8K de información para permitir que el otro escriba.

Con la función de PHP set_file_buffer() es posible definir el tamaño del buffer.

Usando la función fflush() podemos forzar que se escriban en el archivo los cambios pendientes en el buffer de escritura. Cuando se llama a fclose() se escribirán también los cambios pendientes.

<?php
    // Abrir el archivo, creándolo si no existe:
    $archivo = fopen("datos.txt","w+b");

    if( $archivo == false ) {
      echo "Error al crear el archivo";
    }
    else
    {
        // Escribir en el archivo:
        fwrite($archivo, "Estamos probando\r\n");
        fwrite($archivo, "el uso de archivos ");
        fwrite($archivo, "en PHP");

        // Fuerza a que se escriban los datos pendientes en el buffer:
        fflush($archivo);
    }

    // Cerrar el archivo:
    fclose($archivo);
?>

Descargar ejemplo

Crear, abrir y cerrar un archivo en PHP

También podemos insertar texto en un archivo a partir de una cadena de texto usando la función de PHP file_put_contents():

<?php
    $cadena = file_get_contents("datos.txt");

    $cadena .= "\r\nMe encanta PHP!";
    file_put_contents("datos.txt", $cadena);
?>

Descargar ejemplo

archivos en PHP

IMPORTANTE: esta función devolverá false en caso de error, pero también puede devolver otro valor que se evaluaría como tal (como cero o una cadena vacía): al realizar la comparación usa los operadores === o !==, que verifican también si los valores son del mismo tipo de datos.

Información

Los archivos son creados en el servidor web.

Información

Es recomendable usar fflush() cuando se manejan archivos grandes o que pueden ser accedidos por varios procesos, por ejemplo.

Más información

Vea también: [ fwrite() ] - [ fputs() ] - [ file_put_contents() ] - [ stream_set_write_buffer() ]

Primera página Anterior Siguiente Última página
Usamos cookies para ofrecerte una experiencia mejorada, el continuar navegando supone que aceptas su uso