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:

Example 63-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.

Table 63-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