Streams Basics

Using streams is very much like using ANSI stdio functions. The main difference is in how you obtain the stream handle to begin with. In most cases, you will use php_stream_open_wrapper() to obtain the stream handle. This function works very much like fopen, as can be seen from the example below:

例子 44-1. simple stream example that displays the PHP home page

php_stream * stream = php_stream_open_wrapper("http://www.php.net", "rb", REPORT_ERRORS, NULL);
if (stream) {
    while(!php_stream_eof(stream)) {
        char buf[1024];

        if (php_stream_gets(stream, buf, sizeof(buf))) {
            printf(buf);
        } else {
            break;
        }
    }
    php_stream_close(stream);
}

The table below shows the Streams equivalents of the more common ANSI stdio functions. Unless noted otherwise, the semantics of the functions are identical.

表格 44-1. ANSI stdio equivalent functions in the Streams API

ANSI Stdio FunctionPHP Streams FunctionNotes
fopenphp_stream_open_wrapperStreams includes additional parameters
fclosephp_stream_close 
fgetsphp_stream_gets 
freadphp_stream_readThe nmemb parameter is assumed to have a value of 1, so the prototype looks more like read(2)
fwritephp_stream_writeThe nmemb parameter is assumed to have a value of 1, so the prototype looks more like write(2)
fseekphp_stream_seek 
ftellphp_stream_tell 
rewindphp_stream_rewind 
feofphp_stream_eof 
fgetcphp_stream_getc 
fputcphp_stream_putc 
fflushphp_stream_flush 
putsphp_stream_putsSame semantics as puts, NOT fputs
fstatphp_stream_statStreams has a richer stat structure


add a note add a note User Contributed Notes
net_navard at yahoo dot com
08-Dec-2005 11:22
Hello firends

In crude terms, streams are chunks of data, which are    carried out by low-level sockets. When you open a
connection to a host, (Web server, mail server or
whatever), in fact you're opening a socket to that
host and then sending out streams (chunks of data)
either you're sending a request or receiving a response.

Streams are the flow of data that's travelling within
the socket

 (think about a socket like a logical not physical-
pipeline handled by the operating system,
A pipeline is essential just a connection For example ,When we open file by fopen() ,It creates a connection or a pipeline on that file ,so that we can write or read data on that file.
Data in a stream flow along one of tow pipelines:

- Data sent down s stream from your PHP script to the destination file or network server flows the write pipeline.

- Data retrieved from the file or network server flows up the read pipeline. )

and transport are the protocols used to carry out the
data, such as TCP. Also metadata is additional
information that must be handled by sockets. Let's say
you're opening a file with PHP, and this operation
returns a handle or pointer to that file. In this
case, when reading from the file, its contents will be
read as chunks or packets of data (streams), while the
respective pointer, the name of the file, size and so
forth is metadata. Of course, all this data set will
be transported trough a socket via a transport such as
TCP.

                                 With Regards

                                   Amir Hossein Estakhrian