ConFoo 2025

stream_get_contents

(PHP 5, PHP 7, PHP 8)

stream_get_contents残りのストリームを文字列に読み込む

説明

stream_get_contents(resource $stream, ?int $length = null, int $offset = -1): string|false

file_get_contents() と似ていますが、 stream_get_contents() は既にオープンしている ストリームリソースに対して操作を行います。そして、指定した offset から始まる最大 length バイトのデータを取得して文字列に 保存します。

パラメータ

stream (resource)

ストリームリソース(例: fopen() の返す値)。

length (int)

読み込む最大バイト数。デフォルトは null (バッファの残りのデータをすべて読み込む)。

offset (int)

読み込みを開始する前に移動する位置。負の数を指定した場合は移動が発生せず、 現在位置から読み込みを開始します。

戻り値

文字列を返します。失敗した場合に false を返します。

変更履歴

バージョン 説明
8.0.0 length は、nullable になりました。

例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() - ファイルポインタから 1 行取得する
  • fread() - バイナリセーフなファイルの読み込み
  • fpassthru() - ファイルポインタ上に残っているすべてのデータを出力する

add a note

User Contributed Notes 2 notes

up
12
clarck dot smith at gmail dot com
12 years ago
In that case when stream_get_contents/fread/fgets or other stream reading functions block indefinitely your script because they don't reached the limit of bytes to read use the socket_get_meta_data function to figure out the number of the bytes to read. It returns an array that contains a key named 'unread_bytes' and then pass that number to your favourite stream reading functions second parameter to read from the stream.

Maybe a good workaround to use the stream_select function, and set the socket to non-blocking mode with the use of stream_set_blocking($stream, 0). In this case the socket reading functions work properly.

Cheers, Ervin
up
4
m rahman
13 years ago
When omitting the parameter $maxlength, any received bytes are stacked up until the underlying stream is not readable anymore, the the function returns that stack in one piece.
To Top