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:

範例 43-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.

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

ANSI Stdio Function PHP Streams Function Notes
fopen php_stream_open_wrapper Streams includes additional parameters
fclose php_stream_close
fgets php_stream_gets
fread php_stream_read The nmemb parameter is assumed to have a value of 1, so the prototype looks more like read(2)
fwrite php_stream_write The nmemb parameter is assumed to have a value of 1, so the prototype looks more like write(2)
fseek php_stream_seek
ftell php_stream_tell
rewind php_stream_rewind
feof php_stream_eof
fgetc php_stream_getc
fputc php_stream_putc
fflush php_stream_flush
puts php_stream_puts Same semantics as puts, NOT fputs
fstat php_stream_stat Streams has a richer stat structure