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 |