Crear archivo en PHP y escribir contenido sobre él

En este artículo vamos a explicar como crear un archivo en un directorio en PHP y después realizar una escritura sobre este archivo para añadirle contenido.

Usaremos la función sys_get_temp_dir() para devolver la ruta donde se encuentra el directorio temporal.

También usaremos la función tempnam (string $dir , string $prefix) para crear un fichero en la carpeta temporal donde su nombre será único, consta de dos parámetros, en el primer parámetro se introducirá la ruta donde queremos crear nuestro archivo, en nuestro caso será en nuestra carpeta temporal y el segundo parámetro será el prefijo del archivo que deseemos llamarle.

Un ejemplo de nombre de un archivo generado sería el siguiente:

INFAH4J.tmp.pdf

La parte INF es el prefijo, la parte AH4J se calcula de forma automática por la función tempnam, con esto conseguimos que los nombres de archivos generados sean únicos y que no existan dos iguales.

La parte tmp se asigna automáticamente al ser un archivo temporal y la extensión .pdf se la asignamos manualmente.

En nuestro caso crearemos un archivo con extensión .pdf y volcaremos el contenido de un PDF en dicho archivo.

Nuestro caso práctico está enfocado para crear un archivo tipo PDF pero puede tener otro tipo de extensión como .txt, .doc, .csv…

<?php
$ContenidoSalida = "Aquí va el contenido que tendrá nuestro nuevo archivo generado";
 
$directorioFichero = sys_get_temp_dir();
 
//al final le concatenamos la extensión que tendrá nuestro archivo
$tempFile = tempnam($directorioFichero, "INF").".pdf";
 
/* Abrimos el archivo creado con la función fopen, a esta función 
le pasamos la ruta de nuestro nuevo archivo y el modo W que será 
para que podamos escribir y volcar el contenido sobre él. */
$gestor = fopen($tempFile, "w");
 
fwrite($gestor, $ContenidoSalida);
 
fclose($gestor);
 
?>

Borramos el archivo temporal sin extensión para ello usamos la función substr(), está función eliminara los últimos cuatro caracteres del nombre de nuestro archivo, esto lo hacemos porque al usar la función tempnam() se crean dos archivos, un archivo temporal .temp y otro el nombre completo de nuestro archivo con extensión incluida.

 
//Borrariamos INFAH4J.tmp
 
$nombre_fichero_sin = substr($tempFile , 0, -4);
 
unlink($nombre_fichero_sin);
 
//Borrariamos INFAH4J.tmp.pdf
 
unlink($tempFile);

Si se almacena en el directorio temporal (usando sys_get_temp_dir) es fácil que el sistema borre los archivos de forma automática cada cierto tiempo pero para asegurarnos en el caso que no deseemos mantener los archivos almacenados eliminarlos será mejor que los corremos con la función unlink().

Por poner un caso práctico ¿para que serviría generar un archivo para después borrarlo?, pues por ejemplo que se quiera generar una factura en PDF con los datos de una compra, esto tiene que funcionar de forma dinámica, por ello primero crearíamos en archivo PDF, después mandaríamos un correo electrónico con el archivo PDF adjunto y por último borraríamos el archivo ya que no nos interesaría tenerlo almacenado.

Iván Martínez

Ingeniero Informático apasionado por el mundo del desarrollo WEB. Me gusta caminar por este mundo lleno de tecnologías y día a día aprender cosas nuevas como el doctor Frankenstein ¡dadme cosas para experimentar!

Deja un comentario

Tu dirección de correo electrónico no será publicada.