Php 为什么刷新后需要readfile

Php 为什么刷新后需要readfile,php,buffer,readfile,flush,Php,Buffer,Readfile,Flush,所以我正在使用我在互联网上找到的一个解决方案来发送文件,而且它确实在工作! 但我真的不明白为什么:( 在我的解决方案中,我将生成一个CSV(测试;测试;测试;测试;测试) 因此,我告诉我的标题它是一个csv文件,并且它也应该是一个附件: <?php $nom = time().'.csv'; header('Content-type: text/csv'); header('Content-disposition: attachment;filename='.$nom); ?> 我

所以我正在使用我在互联网上找到的一个解决方案来发送文件,而且它确实在工作! 但我真的不明白为什么:(

在我的解决方案中,我将生成一个CSV(测试;测试;测试;测试;测试)

因此,我告诉我的标题它是一个csv文件,并且它也应该是一个附件:

<?php
$nom = time().'.csv';
header('Content-type: text/csv');
header('Content-disposition: attachment;filename='.$nom);
?>
我知道flush()正在将缓冲区释放到客户端,对吗? 但是为什么readfile();是必需的呢? 我的意思是,如果发送了内容,我为什么要再次读取该文件?

readfile($nom);
实际上是在读取并回显您的文件,因此客户端可以接收数据。如果没有这些,csv输出将是空的

flush()
只是确保在开始写入输出之前清空输出缓冲区。我认为现在甚至不需要这样做。它只是确保使用
readfile
写入的输出缓冲区在这样做时是空的。

flush()
与发送文件内容无关,它只会刷新您已回显的任何内容。在本例中,
flush()
也会发送您指定的标题。
flush();
readfile($nom);