vfprintf() is a function provided by PHP to write formatted strings into a specified file stream. Unlike fprintf() , vfprintf() receives an array of parameter lists. This makes it more flexible when dynamically splicing and processing multiple types of data.
Function definition:
int vfprintf ( resource $handle , string $format , array $args )
$handle : File pointer resource, usually returned by fopen() .
$format : Format string.
$args : The array of data to be inserted in the formatted string.
In vfprintf() , we can use a series of format identifiers to support different types of output. Common ones include:
%s : string
%d : integer (decimal)
%f : floating point number
%x : hexadecimal (lowercase)
%X : Hexadecimal (caps)
%b : binary
%c : ASCII character
These identifiers can be combined with modifiers (such as precision, padding, etc.) to complete more complex output requirements.
<?php
$fp = fopen("log.txt", "a");
$name = "Alice";
$age = 30;
vfprintf($fp, "Name: %s, Age: %d\n", array($name, $age));
fclose($fp);
?>
This code writes the following to the log.txt file:
Name: Alice, Age: 30
<?php
$fp = fopen("log.txt", "a");
$product = "Coffee";
$price = 19.456;
vfprintf($fp, "Product: %s, Price: \$%.2f\n", array($product, $price));
fclose($fp);
?>
Output:
Product: Coffee, Price: $19.46
%.2f here means keeping two decimal places.
<?php
$fp = fopen("links.txt", "a");
$endpoint = "api/data";
$id = 42;
$url = "https://gitbox.net/%s?id=%d";
vfprintf($fp, $url."\n", array($endpoint, $id));
fclose($fp);
?>
The contents written to the file are:
https://gitbox.net/api/data?id=42
<?php
$fp = fopen("debug.log", "a");
$time = date("Y-m-d H:i:s");
$userId = 101;
$success = true;
$ip = "192.168.1.10";
vfprintf($fp, "[%s] User ID: %d, Success: %s, IP: %s\n", array(
$time, $userId, $success ? "true" : "false", $ip
));
fclose($fp);
?>
The output is similar:
[2025-05-29 15:30:00] User ID: 101, Success: true, IP: 192.168.1.10
Security : Avoid user input being spliced directly into format strings, preventing format injection attacks.
The order of the array must be accurate : the parameter array must correspond to the format string one by one, and the order cannot be wrong.
File permissions : Make sure that the file written has write permission, otherwise it will cause fopen() or vfprintf() to fail.
Multilingual adaptation : When formatting the output, you can pre-process it with sprintf() and vprintf() .