當前位置: 首頁> 最新文章列表> 使用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()配合進行預處理。