vfprintf() 是 PHP 提供的一个函数,用于将格式化的字符串写入到指定的文件流中。与 fprintf() 不同的是,vfprintf() 接收的是一个数组形式的参数列表。这使得在动态拼接和处理多种类型的数据时更加灵活。
函数定义:
int vfprintf ( resource $handle , string $format , array $args )
$handle:文件指针资源,通常由 fopen() 返回。
$format:格式化字符串。
$args:要插入格式化字符串的数据数组。
在 vfprintf() 中,我们可以使用一系列格式标识符来支持不同类型的输出。常见的包括:
%s:字符串
%d:整数(十进制)
%f:浮点数
%x:十六进制(小写)
%X:十六进制(大写)
%b:二进制
%c:ASCII 字符
这些标识符可与修饰符(如精度、填充等)结合,完成更复杂的输出需求。
<?php
$fp = fopen("log.txt", "a");
$name = "Alice";
$age = 30;
vfprintf($fp, "Name: %s, Age: %d\n", array($name, $age));
fclose($fp);
?>
此代码将以下内容写入 log.txt 文件中:
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);
?>
输出:
Product: Coffee, Price: $19.46
这里的 %.2f 表示保留两位小数。
<?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);
?>
写入文件的内容为:
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);
?>
输出类似:
[2025-05-29 15:30:00] User ID: 101, Success: true, IP: 192.168.1.10