PHP Japan Conference 2024

fprintf

(PHP 5, PHP 7, PHP 8)

fprintf将格式化字符串写入流

描述

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

根据$format参数指定的格式,将生成的字符串写入由$stream参数指定的流资源。

参数

stream

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

format

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

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

Argnum

后跟美元符号$的整数,用于指定转换中要处理的哪个编号参数。

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

Width

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

Precision

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

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

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

Specifiers
说明符 描述
% 一个字面百分号字符。不需要参数。
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类型说明符忽略填充和宽度。

警告

尝试将字符串和宽度说明符组合起来使用需要多个字节才能表示一个字符的字符集可能会导致意外的结果。

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

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

values

返回值

返回写入的字符串长度。

错误/异常

从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 "已写入 $len 字节到 currency.txt 文件";
// 使用 fprintf 的返回值来确定我们写入了多少字节
?>

参见

添加注释

用户贡献的注释 1 条注释

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