温馨提示×

php fpassthru函数如何处理大文件流

PHP
小樊
81
2024-09-20 23:00:33
栏目: 编程语言

fpassthru() 函数在 PHP 中用于将数据从文件直接传输到输出流,而无需在内存中存储整个文件。这在处理大文件时非常有用,因为它可以显著降低内存使用量。

以下是使用 fpassthru() 函数处理大文件流的方法:

  1. 打开要读取的文件以及要将数据写入的输出流(例如,HTTP 响应)。
$inputFile = fopen('large_file.txt', 'rb');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="output.txt"');
  1. 使用 fpassthru() 函数将文件指针从输入流直接传输到输出流。这将逐块读取文件并将其发送到浏览器,而无需将整个文件加载到内存中。
while (!feof($inputFile)) {
    fpassthru($inputFile);
}
  1. 关闭输入文件和输出流。
fclose($inputFile);

这是一个完整的示例,用于将大文件流式传输到浏览器:

<?php
$inputFile = fopen('large_file.txt', 'rb');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="output.txt"');

while (!feof($inputFile)) {
    fpassthru($inputFile);
}

fclose($inputFile);
?>

请注意,fpassthru() 函数不会显示任何进度信息。如果你需要跟踪大文件的传输进度,可以考虑使用其他方法,例如分块传输或计算已传输的字节数。

0