当前位置: 首页> 最新文章列表> 使用 vfprintf 输出多种数据类型的格式化内容

使用 vfprintf 输出多种数据类型的格式化内容

gitbox 2025-05-29

什么是 vfprintf()?

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 表示保留两位小数。


示例三:动态生成 URL 并写入文件

<?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

小技巧与注意事项

  1. 安全性:避免用户输入直接拼接到格式字符串中,防止格式化注入攻击。

  2. 数组顺序要精确:参数数组必须与格式字符串一一对应,顺序不能错。

  3. 文件权限:确保写入的文件有写权限,否则会导致 fopen()vfprintf() 失败。

  4. 多语言适配:格式化输出时可与 sprintf()vprintf() 配合进行预处理。