stream_get_contents是否比file_get_contents更低级别且更快?

时间:2013-12-19 05:44:29

标签: php performance file file-io file-get-contents

从评论到this answer我认为“stream_get_contentsfile_get_contents相比较低”。但是根据Manualstream_get_contents

  

与file_get_contents()相同,但stream_get_contents()对已经打开的流资源进行操作,并返回字符串中的剩余内容,最多为maxlength个字节,并从指定的偏移量开始。

哪种说法是正确的? stream_get_contents真的更低,更快吗?

具体来说,我有兴趣从HD中读取本地文件。

1 个答案:

答案 0 :(得分:1)

我来晚了,但它可能会帮助其他人

file_get_contents() 将文件内容加载到内存中。它位于内存中,等待程序调用 echo,然后将其传送到输出缓冲区。

一个很好的用法示例是:

echo file_get_contents('file.txt');

stream_get_contents() 在已经打开的流上传送内容。一个例子是这样的:

$handle = fopen('file.txt', 'w+');
echo stream_get_contents($handle);

您可以看到 stream_get_contents() 使用由 fopen() 创建的现有流来获取字符串形式的内容。

file_get_contents() 是更受欢迎的方式,因为它不依赖于打开的流,并且使用内存映射技术可以有效地处理内存。对于外部站点读取,您还可以在获取内容时设置 HTTP 标头。 (有关详细信息,请参阅https://www.php.net/manual/en/function.file-get-contents.php

对于较大的文件/资源​​,stream_get_contents() 可能是首选,因为它提供部分内容,而不是 file_get_contents() 将整个数据转储到内存中。