fprint()
La función fprintf() escribe una cadena formateada en un archivo abierto. Aprende su sintaxis, especificadores de formato y ejemplos prácticos.
La función PHP fprintf() escribe una cadena formateada en un archivo abierto (stream). Piensa en ella como printf() — que imprime en el navegador/salida estándar — pero con el destino redirigido a un manejador de archivo. Es la opción natural cuando deseas texto limpio, alineado y predecible en un archivo de registro o un informe generado, en lugar de construir cadenas manualmente con concatenación.
Esta página cubre la sintaxis, los especificadores de formato más utilizados, dos ejemplos completos ejecutables y las funciones relacionadas a las que puedes recurrir como alternativa.
Sintaxis
int fprintf ( resource $handle , string $format [, mixed ...$args ] )| Parámetro | Requerido | Descripción |
|---|---|---|
$handle | Sí | Un recurso de stream de archivo devuelto por fopen(). |
$format | Sí | La cadena de formato. El texto plano se escribe tal cual; los marcadores % son reemplazados por $args. |
$args | No | Un valor por cada marcador %, en orden. |
La función devuelve el número de bytes escritos, o false en caso de error. Ten en cuenta que el valor de retorno es la longitud de la cadena escrita, no el número de argumentos — útil cuando necesitas rastrear cuántos datos has registrado.
Especificadores de formato
El poder de fprintf() reside en la cadena $format. Cada % introduce un marcador:
| Especificador | Significado | Ejemplo de salida |
|---|---|---|
%s | String | John |
%d | Entero (con signo) | 30 |
%f | Float | 4166.666667 |
%.2f | Float con 2 decimales | 4166.67 |
%05d | Entero con ceros a la izquierda hasta ancho 5 | 00042 |
%x | Hexadecimal | 1a |
%% | Un signo % literal | % |
Los mismos especificadores funcionan en printf() y sprintf(), así que una vez que los aprendes aquí se aplican en todas partes.
Escribir un informe
A continuación se muestra un ejemplo completo que escribe un pequeño informe en un archivo.
<?php
$file = fopen("report.txt", "w");
if ($file === false) {
die("Failed to open file");
}
$name = "John";
$age = 30;
$income = 50000;
// \$ prints a literal dollar sign; %.2f rounds the float to 2 decimals
$bytes = fprintf($file, "Name: %s\nAge: %d\nIncome: \$%.2f", $name, $age, $income / 12);
fclose($file);
echo "$bytes bytes written"; // 35 bytes written
?>Abrimos report.txt para escritura ("w") y verificamos que fopen() no haya fallado. Luego, fprintf() sustituye cada variable en la cadena de formato: %s para el nombre, %d para la edad y \$%.2f para el ingreso mensual (un $ literal seguido de un float redondeado a dos decimales). Siempre llama a fclose() cuando hayas terminado para que el búfer se vacíe y el manejador se libere.
El archivo report.txt resultante contiene:
Name: John
Age: 30
Income: $4166.6750000 / 12 es 4166.6667, que %.2f redondea a 4166.67.
Añadir entradas a un archivo de registro
Un uso muy común es agregar una línea formateada a un registro. Abre el archivo en modo de adición ("a") para que cada llamada añada una nueva línea en lugar de sobrescribir el contenido anterior:
<?php
$file = fopen("error.log", "a");
if ($file === false) {
die("Failed to open file");
}
$error_code = 404;
$date = date("Y-m-d H:i:s");
$ip_address = $_SERVER['REMOTE_ADDR'];
fprintf($file, "[%s] Error %d from IP address %s\n", $date, $error_code, $ip_address);
fclose($file);
?>Dado que el archivo se abre con "a", cada ejecución añade una nueva línea; nada de lo que ya estaba en error.log se pierde. El \n al final de la cadena de formato coloca cada entrada en su propia línea. Una línea añadida típica tiene el siguiente aspecto:
[2023-03-15 15:30:00] Error 404 from IP address 192.168.0.1fprintf() vs. funciones relacionadas
Elegir la herramienta adecuada mantiene tu código claro:
printf()— el mismo formato, pero escribe en la salida estándar (navegador/CLI) en lugar de en un archivo.sprintf()— devuelve la cadena formateada en lugar de escribirla en ningún lugar, para que puedas almacenarla o reutilizarla.fwrite()— escribe bytes en bruto en un archivo sin formato; úsalo cuando no necesites marcadores%.vfprintf()— comofprintf(), pero recibe los argumentos como un array único en lugar de una lista variádica.
Errores comunes
- Especificadores y argumentos no coincidentes.
%daplicado a una cadena no numérica produce0; pasar menos argumentos que marcadores genera una advertencia. - Olvidar escapar
%. Para imprimir un signo de porcentaje literal, usa%%, no%. - Olvidar
fclose(). Los datos en búfer pueden no vaciarse en el disco hasta que el manejador se cierre (o el script finalice). - El modo de apertura importa.
"w"trunca el archivo;"a"añade. Elige deliberadamente.