Aprendiendo PHP, parte 13: Trabajar con archivos

Php nos da la posibilidad de crear, modificar, eliminar y recuperar el contenido de archivos de texto como por ejemplo txt, xml o incluso html.

Crear archivos

Para crear y editar archivos debemos usar dos funciones, fopen() y fwrite(), la primer función creará un archivo si no existe, y si existe lo reemplazará por el nuevo. fwrite() nos permitirá escribir el contenido del mismo:

<?php
 $contenido = 'Texto de prueba';
 $archivo = fopen('archivo.txt', 'w');
 fwrite($archivo, $contenido);
 fclose($archivo);
?>

Como se ve en el ejemplo creamos un texto para el archivo: »Texto de prueba’, luego abrimos el archivo al que llamamos ‘archivo.txt’, con respecto al segundo parámetro se refiere al la manera de abrir el mismo, en nuestro caso es w de ‘write’, osea de escritura. Los modos son:

  • w para escritura, si el archivo no existe lo crea y si ya existe elimina sus contenidos.
  • w+ para escritura y lectura, si el archivo no existe lo crea y si ya existe elimina sus contenidos.
  • r para lectura
  • r+ para lectura y escritura
  • a para adjuntar, escribe al final del mismo, si no existe intenta crearlo.
  • b para archivos binarios, este es el recomendado para php.

Luego usamos la función fwrite() para escribir el contenido del archivo y finalmente cerramos el mismo con fclose().

 

Leer archivos

Para leer un archivo debemos usar la función file_get_contents() que nos devolverá todo el texto de éste. Por ejemplo si quisiéramos recuperar el archivo que acabamos de crear:

<?php
 $contenido_de_archivo = file_get_contents('archivo.txt');
 echo $contenido_de_archivo;
?>

Esto nos devolverá:

Texto de prueba

Que obviamente es el texto que le agregamos al archivo.

 

Buscar archivos

Hasta acá todo muy bien, pero nosotros no hemos tenido en cuenta algo, ¿qué pasa si el archivo no existe? Si por ejemplo nosotros quisiéramos leer un archivo que no existe PHP nos devolverá un error. Por tanto antes de leer el archivo debemos comprobar que éste exista con la función file_exists():

<?php
 if(file_exists('archivo.txt')){
    echo '<strong> El contenido del archivo es: </strong>';
    echo '<br />';
    echo file_get_contents('archivo.txt');
 }else{
    echo '<strong> El archivo no existe </strong>';
 }
?>

 

Eliminar archivos

Para eliminar archivos debemos usar la función unlink() que eliminará el mismo. Devolverá true o false dependiendo de si se pudo o no eliminar el archivo:

<?php
 if(file_exists('archivo.txt')){
    if(unlink('archivo.txt')){
       echo '<strong> El archivo ha sido eliminado </strong>';
    }else{
       echo '<strong> Error al intentar eliminar el archivo </strong>';
    }
 }else{
    echo '<strong> El archivo no existe </strong>';
 }
?>

 

Crear directorios

Para crear un directorio debemos usar la función mkdir() que recibirá como parámetro el nombre del directorio que vamos a crear:

<?php
 if(mkdir('carpeta')){
    echo 'El directorio ha sido creado';
 }else{
    echo 'El directorio NO ha podido ser creado';
 }
?>

 

Eliminar directorios

Para eliminar un directorio debemos comprobar si el mismo existe con la función is_dir() y eliminarlo con rmdir(), ambos recibirán como parámetro el nombre del directorio:

<?php
 if(is_dir('carpeta')){
    if(rmdir('carpeta')){
       echo 'El directorio ha sido eliminado';
    }else{
       echo 'El directorio no ha podido ser eliminado';
    }
 }else{
    echo 'El directorio no existe';
 }
?>

 

Listar archivos de un directorio

Con PHP podemos recorrer los archivos de un directorio en forma de array. Supongamos que creamos un directorio con tres archivos:

<?php
 mkdir('animales');
 $perro = fopen('animales/perro.txt', 'w');
 $caballo = fopen('animales/caballo.txt', 'w');
 $tigre = fopen('animales/tigre.txt', 'w');
 fclose($perro);
 fclose($caballo);
 fclose($tigre);
?>

Y ahora debemos usar la función scandir() que nos devolverá el listado con los nombres de archivos. Recibirá como parámetro el nombre del directorio:

<?php
 $animales = scandir('animales');
 foreach($animales as $archivo){
    echo $archivo . '<br />';
 }
?>

Que devolverá por pantalla:

.
..
caballo.txt
perro.txt
tigre.txt

Notar que también recupera el punto(.) y doble punto punto(..), para quitarlos simplemente debemos filtrarlos con un if:

<?php
 $animales = scandir('animales');
 foreach($animales as $archivo){
    if($archivo != '.' and $archivo != '..'){
       echo $archivo . '<br />';
    }
 }
?>

 

Copiar archivos

Supongamos que nosotros quisiéramos copiar un archivo de un directorio y pegarlo en otro, deberíamos usar la función copy() que recibirá dos parámetros, la ruta donde está el archivo actualmente y dónde queremos copiar:

<?php
 //Creamos un directorio
 mkdir('directorio1');
 //Creamos un archivo dentro del directorio que acabamos de crear
 $archivo = fopen('directorio1/archivo.txt', 'w');
 fclose($archivo);
 //Creamos un segundo directorio
 mkdir('directorio2');
 //Copiamos el archivo en el nuevo directorio
 copy('directorio1/archivo.txt', 'directorio2/archivo.txt');
?>

Pero si lo que en cambio queremos hacer es mover un archivo de un directorio a otro deberíamos usar la función rename(), que recibirá los mismos parámetros que copy():

<?php
 //Creamos un directorio
 mkdir('directorio1');
 //Creamos un archivo dentro del directorio que acabamos de crear
 $archivo = fopen('directorio1/archivo.txt', 'w');
 fclose($archivo);
 //Creamos un segundo directorio
 mkdir('directorio2');
 //Movemos el archivo en el nuevo directorio
 rename('directorio1/archivo.txt', 'directorio2/archivo.txt');
?>

Para entender mejor la diferencia, copy() es copy/paste (copiar y pegar), mientras que rename() es cortar/pegar (cortar y pegar) Además algo que no tuvimos en cuenta, pero es importarte agregar es que ambas funciones devuelve true o false, dependiendo de su pudieron o no realizar el propósito.

 

Información del archivo

Supongamos que tenemos un archivo creado:

<?php
 $archivo = fopen('archivo.txt', 'w');
 fwrite($archivo, 'Texto del archivo');
 fclose($archivo);
?>

Para recuperar la información del mismo debemos usar la función pathinfo():

<?php
 $info_de_archivo = pathinfo('archivo.txt');
 echo '<pre>';
 var_dump($info_de_archivo);
 echo '</pre>';
?>

Esto nos devolverá un array asociativo con información del archivo:

array(4) {
  ["dirname"]=>
  string(1) "."
  ["basename"]=>
  string(11) "archivo.txt"
  ["extension"]=>
  string(3) "txt"
  ["filename"]=>
  string(7) "archivo"
}

También podemos recuperar el peso del archivo en bytes:

<?php
 $peso_de_archivo = filesize('archivo.txt');
 echo $peso_de_archivo;
?>

 

Anterior: Aprendiendo PHP, parte 12: Fechas

Siguiente: Aprendiendo PHP, parte 14: Errores

One Reply to “Aprendiendo PHP, parte 13: Trabajar con archivos”

Comments are closed.