阅读量:0
fpassthru()
函数在 PHP 中用于将数据从文件直接传输到输出流,而无需在内存中存储整个文件。这在处理大文件时非常有用,因为它可以显著降低内存使用量。
以下是使用 fpassthru()
函数处理大文件流的方法:
- 打开要读取的文件以及要将数据写入的输出流(例如,HTTP 响应)。
$inputFile = fopen('large_file.txt', 'rb'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="output.txt"');
- 使用
fpassthru()
函数将文件指针从输入流直接传输到输出流。这将逐块读取文件并将其发送到浏览器,而无需将整个文件加载到内存中。
while (!feof($inputFile)) { fpassthru($inputFile); }
- 关闭输入文件和输出流。
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()
函数不会显示任何进度信息。如果你需要跟踪大文件的传输进度,可以考虑使用其他方法,例如分块传输或计算已传输的字节数。