Overview

The PHP Streams API introduces a unified approach to the handling of
files and sockets in PHP extension. Using a single API with standard
functions for common operations, the streams API allows your extension
to access files, sockets, URLs, memory and script-defined objects.
Streams is a run-time extensible API that allows dynamically loaded
modules (and scripts!) to register new streams.

The aim of the Streams API is to make it comfortable for developers to
open files, URLs and other streamable data sources with a unified API
that is easy to understand. The API is more or less based on the ANSI
C stdio family of functions (with identical semantics for most of the main
functions), so C programmers will have a feeling of familiarity with streams.

The streams API operates on a couple of different levels: at the base level,
the API defines php_stream objects to represent streamable data sources.
On a slightly higher level, the API defines php_stream_wrapper objects
which "wrap" around the lower level API to provide support for retrieving
data and meta-data from URLs. An additional context
parameter, accepted by most stream creation functions, is passed to the
wrapper's stream_opener method to fine-tune the behavior
of the wrapper.

Any stream, once opened, can also have any number of filters
applied to it, which process data as it is read from/written to the stream.

Streams can be cast (converted) into other types of file-handles, so that they
can be used with third-party libraries without a great deal of trouble. This
allows those libraries to access data directly from URL sources. If your
system has the fopencookie() or
funopen() function, you can even
pass any PHP stream to any library that uses ANSI stdio!

Note:
The functions in this chapter are for use in the PHP source code and
are not PHP functions. Userland stream functions can be found in the
Stream Reference.