Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : Stream Functions : stream_get_contents

stream_get_contents

Reads remainder of a stream into a string (PHP 5)
string stream_get_contents ( resource handle [, int maxlength [, int offset]] )

Identical to file_get_contents(), except that stream_get_contents() operates on an already open stream resource and returns the remaining contents in a string, up to maxlength bytes and starting at the specified offset.

Parameters

handle (resource)

A stream resource (e.g. returned from fopen())

maxlength (integer)

The maximum bytes to read. Defaults to -1 (read all the remaining buffer).

offset (integer)

Seek to the specified offset before reading. Added in PHP 5.1.0.

Return Values

Returns a string, or FALSE on failure.

Examples

Example 2378. stream_get_contents() example

<?php

if ($stream = fopen('http://www.example.com', 'r')) {
   
// print all the page starting at the offset 10
   
echo stream_get_contents($stream, -1, 10);

   
fclose($stream);
}


if (
$stream = fopen('http://www.example.net', 'r')) {
   
// print the first 5 bytes
   
echo stream_get_contents($stream, 5);

   
fclose($stream);
}

?>


See Also
fgets()
fread()
fpassthru()
Note:

This function is binary-safe.

Code Examples / Notes » stream_get_contents

jim keller

Per wez (at php.net), "the trick is to tell the recipient how big the packet is, so that it can read the correct length."
In my own experience, when using PHP streams to send data bursts, the "max length" parameter seems to act more as an exact length parameter, as the stream will block indefinitely until max length is reached or until the other side fcloses() the stream. The latter is ok unless you need to keep the stream open to continue communication, in which case you have to let the receiving end know how much data to expect, or it will block indefinitely if the max length of data is not sent. You need to pack() and prepend the length of the outgoing data stream in the first 4 bytes of the packet, as follows:
function send_pkt($stream, $my_data)
{
  $len = strlen($my_data);
  $send_data = pack('N', $len) . $my_data; //Pack the length in a network-friendly way, then prepend it to the data.
  $final_len = strlen($send_data);
  if ( fwrite($stream, $send_data) < $final_len ) {
                  //something went wrong, trigger error
  }
}
function recv_pkt($stream)
{
  $packed_len = stream_get_contents($stream, 4); //The first 4 bytes contain our N-packed length
  $hdr = unpack('Nlen', $packed_len);
  $len = $hdr['len'];
  $recvd_data = stream_get_contents($stream, $len);
  return $recvd_data;
}


Change Language


Follow Navioo On Twitter
stream_bucket_append
stream_bucket_make_writeable
stream_bucket_new
stream_bucket_prepend
stream_context_create
stream_context_get_default
stream_context_get_options
stream_context_set_option
stream_context_set_params
stream_copy_to_stream
stream_encoding
stream_filter_append
stream_filter_prepend
stream_filter_register
stream_filter_remove
stream_get_contents
stream_get_filters
stream_get_line
stream_get_meta_data
stream_get_transports
stream_get_wrappers
stream_register_wrapper
stream_resolve_include_path
stream_select
stream_set_blocking
stream_set_timeout
stream_set_write_buffer
stream_socket_accept
stream_socket_client
stream_socket_enable_crypto
stream_socket_get_name
stream_socket_pair
stream_socket_recvfrom
stream_socket_sendto
stream_socket_server
stream_socket_shutdown
stream_wrapper_register
stream_wrapper_restore
stream_wrapper_unregister
eXTReMe Tracker