PHP Conference Japan 2024

stream_get_contents

(PHP 5, PHP 7, PHP 8)

stream_get_contents读取流的剩余内容到字符串中

描述

stream_get_contents(资源 $stream, ?int $length = null, int $offset = -1): 字符串|false

file_get_contents() 相同,不同之处在于 stream_get_contents() 操作的是已经打开的流资源,并将剩余内容以字符串形式返回,最多 length 字节,从指定的 offset 开始。

参数

stream (资源)

一个流资源(例如,由 fopen() 返回)

length (int)

要读取的最大字节数。默认为 null(读取所有剩余缓冲区)。

offset (int)

读取前跳转到指定的偏移量。如果此数字为负数,则不会进行跳转,读取将从当前位置开始。

返回值

返回一个字符串或在失败时返回 false

变更日志

版本 描述
8.0.0 length 现在可以为 null。

示例

示例 #1 stream_get_contents() 示例

<?php

if ($stream = fopen('http://www.example.com', 'r')) {
// 从偏移量 10 开始打印整个页面
echo stream_get_contents($stream, -1, 10);

fclose($stream);
}


if (
$stream = fopen('http://www.example.net', 'r')) {
// 打印前 5 个字节
echo stream_get_contents($stream, 5);

fclose($stream);
}

?>

注释

注意: 此函数是二进制安全的。

注意:

当指定 length 值不是 null 时,即使实际内容短得多,此函数也会立即分配一个该大小的内部缓冲区。

参见

  • fgets() - 从文件指针获取一行
  • fread() - 二进制安全的文件读取
  • fpassthru() - 输出文件指针上所有剩余数据

添加注释

用户贡献的注释 2 个注释

clarck dot smith at gmail dot com
12 年前
在这种情况下,当 stream_get_contents/fread/fgets 或其他流读取函数无限期阻塞您的脚本,因为它们没有达到要读取的字节限制时,请使用 socket_get_meta_data 函数来确定要读取的字节数。它返回一个包含名为“unread_bytes”键的数组,然后将该数字传递给您最喜欢的流读取函数的第二个参数以从流中读取。

也许可以使用 stream_select 函数,并将套接字设置为非阻塞模式(使用 stream_set_blocking($stream, 0))。在这种情况下,套接字读取函数可以正常工作。

此致,Ervin
m rahman
13 年前
省略参数 $maxlength 时,任何接收到的字节都会堆积起来,直到底层流不再可读,然后函数会一次性返回该堆栈。
To Top