stream_get_contents
(PHP 5, PHP 7, PHP 8)
stream_get_contents — 残りのストリームを文字列に読み込む
説明
file_get_contents() と似ていますが、
stream_get_contents() は既にオープンしている
ストリームリソースに対して操作を行います。そして、指定した
offset
から始まる最大
length
バイトのデータを取得して文字列に
保存します。
パラメータ
戻り値
文字列を返します。失敗した場合に 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
clarck dot smith at gmail dot com ¶
13 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
↑ and ↓ to navigate •
Enter to select •
Esc to close
Press Enter without
selection to search using Google