如何将readfile()函数的内容赋值给一个变量?

6

readfile()函数输出了内容,但我想把内容保存在变量中。我该怎么办?我尝试过 $content=readfile("file.txt"),但结果不对。

我想实现这样的效果:

$data=readfile("text.txt");
echo htmlentities($data);

那应该能让你了解我希望它如何工作。

还有一件事,我知道file_get_content()的用法...但是我对于那个特定的"readfile()"感到困惑...不知道如何将变量分配给缓冲区? - netrox
如果你已经知道了,为什么不使用它呢?readfilefile_get_contents用于执行两种不同的操作,而你想要做的正是file_get_contents所用的,而不是readfile所用的。 - Paul
2个回答

19

这就是 file_get_contents 的用途:

$data = file_get_contents("text.txt");
echo htmlentities($data);

如果你必须使用readfile,你可以使用输出缓冲将内容获取到一个变量中:

ob_start();
readfile("text.txt");
$data = ob_get_clean();
echo htmlentities($data);

但我不明白为什么你在这种情况下要避免使用file_get_contents


这就是我要找的答案。实际上不会用到,但我很好奇当我执行“readfile()”时缓冲区在哪里 - 文档说它输出到缓冲区,所以我想为什么不将一个变量分配给该缓冲区,但当我这样做时,它未能达到我的预期 - 它输出了一个数字。这更多是一个编程概念,我需要掌握处理缓冲区时。 - netrox
啊,我明白了。 我会保留关于 file_get_contents 的部分,以便任何看到这个的人都知道他们应该使用它。另外你需要知道,PHP 中的所有内容默认都被写入一个缓冲区,称为输出缓冲区。像 echo "Test"; 这样的语句也会写入该缓冲区。该缓冲区根据不同的设置在数据达到每4KB时被刷新到实际输出,或者直到脚本结束才刷新到实际输出。 - Paul
ob_start函数仅仅是捕获输出缓冲区,允许你对其进行额外的处理,如果需要的话,甚至可以阻止它输出。当你想从某个库中调用一个函数,并且该函数使用echo来输出内容,但你不希望它输出任何东西,或者在输出之前需要对其进行处理时,这个函数非常有用。 - Paul
真是太神奇了,现在我知道缓冲区、ob_start()和ob_get_clean()的含义后,一切突然变得清晰明了了——直到此刻才恍然大悟。 - netrox

0

readfile()函数将文件内容写入缓冲区。建议使用file_get_contents()函数代替。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接