fprintf

(PHP 5, PHP 7, PHP 8)

fprintf将格式化的字符串写入流

描述

fprintf(资源 $stream, 字符串 $format, 混合 ...$values): 整数

根据 format 指定的格式写入到由 stream 指定的流资源中。

参数

stream

文件系统指针 资源,通常使用 fopen() 创建。

format

格式字符串由零个或多个指令组成:直接复制到结果的普通字符(不包括 %)和转换说明,每个转换说明都会导致获取自己的参数。

转换说明遵循以下原型:%[argnum$][flags][width][.precision]specifier

Argnum

一个整数,后跟一个美元符号 $,指定在转换中处理哪个参数编号。

Flags
Flag 描述
- 在给定字段宽度内左对齐;右对齐是默认值
+ 在正数前面加一个加号 +;默认情况下,只有负数前面加一个负号。
(空格) 用空格填充结果。这是默认值。
0 仅用零填充数字。对于 s 说明符,这也可能用零进行右填充。
'(字符) 用字符 (char) 填充结果。

Width

一个整数,表示此转换应产生的最小字符数,或者 *。如果使用 *,则宽度作为附加整数参数提供,该参数位于由说明符格式化的参数之前。

Precision

一个句点 .,可以选择后面跟着一个整数或 *,其含义取决于说明符

  • 对于 eEfF 说明符:这是小数点后要打印的位数(默认情况下,为 6)。
  • 对于 gGhH 说明符:这是要打印的有效位数的最大值。
  • 对于 s 说明符:它充当截止点,设置字符串的最大字符限制。

注意: 如果句点没有为精度指定显式值,则假定为 0。如果使用 *,则精度作为附加整数参数提供,该参数位于由说明符格式化的参数之前。

Specifiers
Specifier 描述
% 百分号字符。不需要参数。
b 参数被视为整数,并以二进制形式呈现。
c 参数被视为整数,并以该 ASCII 对应的字符形式呈现。
d 参数被视为整数,并以(带符号的)十进制数形式呈现。
e 参数被视为科学计数法(例如 1.2e+2)。
E e 说明符相同,但使用大写字母(例如 1.2E+2)。
f 参数被视为浮点数,并以浮点数形式呈现(与语言环境相关)。
F 参数被视为浮点数,并以浮点数形式呈现(与语言环境无关)。
g

通用格式。

令 P 等于精度(如果非零),如果省略精度则为 6,如果精度为零则为 1。然后,如果使用 E 样式进行转换会产生 X 的指数

如果 P > X ≥ −4,则转换采用 f 样式,精度为 P − (X + 1)。否则,转换采用 e 样式,精度为 P − 1。

G g 说明符相同,但使用 Ef
h g 说明符相同,但使用 F。从 PHP 8.0.0 开始可用。
H g 说明符相同,但使用 EF。从 PHP 8.0.0 开始可用。
o 参数被视为整数,并以八进制形式呈现。
s 参数被视为字符串并以字符串形式呈现。
u 参数被视为整数,并以无符号十进制数形式呈现。
x 参数被视为整数,并以十六进制数形式呈现(使用小写字母)。
X 参数被视为整数,并以十六进制数形式呈现(使用大写字母)。

警告

c 类型说明符忽略填充和宽度。

警告

尝试将字符串和宽度说明符的组合与需要每个字符超过一个字节的字符集一起使用可能会导致意外结果。

变量将被强制转换为适合说明符的类型

类型处理
Type Specifiers
字符串 s
整数 ducoxXb
浮点数 eEfFgGhH

返回值

返回写入的字符串的长度。

错误/异常

从 PHP 8.0.0 开始,如果参数数量为零,则会抛出 ValueError。在 PHP 8.0.0 之前,会发出 E_WARNING

从 PHP 8.0.0 开始,如果 [width] 小于零或大于 PHP_INT_MAX,则会抛出 ValueError。在 PHP 8.0.0 之前,会发出 E_WARNING

从 PHP 8.0.0 开始,如果 [precision] 小于零或大于 PHP_INT_MAX,则会抛出 ValueError。在 PHP 8.0.0 之前,会发出 E_WARNING

从 PHP 8.0.0 开始,当提供的参数少于所需参数时,会抛出 ArgumentCountError。在 PHP 8.0.0 之前,将返回 false 并发出 E_WARNING

变更日志

版本 描述
8.0.0 此函数不再在失败时返回 false
8.0.0 如果参数数量为零,则抛出 ValueError;以前,此函数会发出 E_WARNING
8.0.0 如果 [width] 小于零或大于 PHP_INT_MAX,则抛出 ValueError;以前,此函数会发出 E_WARNING
8.0.0 如果 [precision] 小于零或大于 PHP_INT_MAX,则抛出 ValueError;以前,此函数会发出 E_WARNING
8.0.0 当提供的参数少于所需参数时,抛出 ArgumentCountError;以前,此函数会发出 E_WARNING

示例

示例 #1 fprintf(): 零填充整数

<?php
if (!($fp = fopen('date.txt', 'w'))) {
return;
}

fprintf($fp, "%04d-%02d-%02d", $year, $month, $day);
// 将格式化的 ISO 日期写入 date.txt
?>

示例 #2 fprintf(): 格式化货币

<?php
if (!($fp = fopen('currency.txt', 'w'))) {
return;
}

$money1 = 68.75;
$money2 = 54.35;
$money = $money1 + $money2;
// echo $money 将输出 "123.1";
$len = fprintf($fp, '%01.2f', $money);
// 将 "123.10" 写入 currency.txt

echo "wrote $len bytes to currency.txt";
// 使用 fprintf 的返回值来确定我们写入了多少字节
?>

另请参阅

添加注释

用户贡献注释 1 条注释

1
Julien MOREAU
3 年前
如果您使用命令行界面 (CLI SAPI),您可能对以下内容感兴趣:https://php.net/manual/en/features.commandline.io-streams.php 中描述的 3 个标准输入/输出流 (STDIN、STDOUT 和 STDERR)。
To Top