PHP fflush 函数
最后修改于 2025 年 4 月 3 日
PHP 的 fflush 函数强制将所有缓冲的输出写入文件指针。 当您需要立即输出而无需等待缓冲区填满时,它很有用。
基本定义
fflush 函数将输出刷新到文件。它接受一个参数:文件指针资源。 成功时返回 true,失败时返回 false。
语法:fflush(resource $stream): bool。 该函数特别适用于像 STDOUT 或文件句柄这样的输出流。
fflush 基本示例
这展示了 fflush 与文件句柄的最简单用法。
basic_fflush.php
<?php
declare(strict_types=1);
$file = fopen('output.txt', 'w');
fwrite($file, "Hello, World!\n");
fflush($file);
fclose($file);
这写入一个文件并立即刷新缓冲区。 如果没有 fflush,数据可能会保留在缓冲区中,直到脚本结束或缓冲区填满。
刷新 STDOUT
fflush 可以与 STDOUT 一起使用,用于实时命令行输出。
stdout_flush.php
<?php
declare(strict_types=1);
for ($i = 0; $i < 5; $i++) {
echo "Progress: $i\n";
fflush(STDOUT);
sleep(1);
}
这演示了在 CLI 脚本中的实时输出。 如果没有 fflush,输出可能会被缓冲并在脚本完成时一次性出现。
刷新网络流
fflush 在写入网络套接字或管道时很有用。
socket_flush.php
<?php
declare(strict_types=1);
$socket = fsockopen('example.com', 80);
fwrite($socket, "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n");
fflush($socket);
while (!feof($socket)) {
echo fgets($socket, 128);
}
fclose($socket);
这会将 HTTP 请求立即刷新到服务器。 网络编程通常需要立即传输数据,而不是缓冲输出。
使用 fflush 的错误处理
此示例显示了在使用 fflush 时的正确错误处理。
error_handling.php
<?php
declare(strict_types=1);
$file = fopen('data.log', 'a');
if ($file === false) {
die("Failed to open file");
}
$bytes = fwrite($file, "Log entry\n");
if ($bytes === false) {
die("Failed to write to file");
}
if (!fflush($file)) {
die("Failed to flush output");
}
fclose($file);
正确的错误处理可确保数据完整性。 在进行文件处理过程的下一步之前,会检查每个操作是否成功。
性能注意事项
此示例演示了频繁刷新的性能影响。
performance.php
<?php
declare(strict_types=1);
$file = fopen('large_data.txt', 'w');
// Without flushing
$start = microtime(true);
for ($i = 0; $i < 10000; $i++) {
fwrite($file, "Line $i\n");
}
$timeNoFlush = microtime(true) - $start;
// With flushing
rewind($file);
$start = microtime(true);
for ($i = 0; $i < 10000; $i++) {
fwrite($file, "Line $i\n");
fflush($file);
}
$timeWithFlush = microtime(true) - $start;
fclose($file);
echo "Without flush: $timeNoFlush seconds\n";
echo "With flush: $timeWithFlush seconds\n";
频繁刷新会显著影响性能。 此示例比较了在每次写操作后进行刷新和不进行刷新时的执行时间。
最佳实践
- 选择性刷新: 仅在需要立即输出时才进行刷新。
- 错误处理: 始终检查 fflush 的返回值。
- 资源管理: 刷新后正确关闭文件。
- 缓冲: 了解 PHP 的输出缓冲机制。
- 性能: 平衡数据安全性和性能。
来源
本教程介绍了 PHP fflush 函数,并提供了实际示例,展示了它在不同场景中的用法。
作者
列出 所有 PHP 文件系统函数。