|
|
CVIII. Stream Functions
Streams were introduced with PHP 4.3.0 as
a way of generalizing file, network, data compression, and other
operations which share a common set of functions and uses. In
its simplest definition, a stream is a
resource object which exhibits streamable
behavior. That is, it can be read from or written to in a linear
fashion, and may be able to fseek() to an
arbitrary locations within the stream.
A wrapper is additional code which tells the stream how to handle
specific protocols/encodings. For example, the http
wrapper knows how to translate a URL into an HTTP/1.0
request for a file on a remote server. There are many wrappers
built into PHP by default (See L),
and additional, custom wrappers may be added either within a
PHP script using stream_wrapper_register(),
or directly from an extension using the API Reference in 45.
Because any variety of wrapper may be added to PHP,
there is no set limit on what can be done with them. To access the list
of currently registered wrappers, use stream_get_wrappers().
A stream is referenced as: scheme://target
scheme(string) -
The name of the wrapper to be used. Examples include: file,
http, https, ftp, ftps, compress.zlib, compress.bz2, and php. See
L for a list of PHP builtin wrappers. If
no wrapper is specified, the function default is used (typically
file://).
target -
Depends on the wrapper used. For filesystem related streams this is
typically a path and filename of the desired file. For network related
streams this is typically a hostname, often with a path appended. Again, see
L for a description of targets for builtin streams.
A filter is a final piece of code which may perform
operations on data as it is being read from or written to a stream.
Any number of filters may be stacked onto a stream. Custom
filters can be defined in a PHP script using
stream_filter_register() or in an extension using the
API Reference in 45. To access the list of currently
registered filters, use stream_get_filters().
A context is a set of parameters and
wrapper specific options which modify or enhance the
behavior of a stream. Contexts are created using
stream_context_create() and can be passed to most
filesystem related stream creation functions (i.e. fopen(),
file(), file_get_contents(), etc...).
Options can be specified when calling
stream_context_create(), or later using
stream_context_set_option().
A list of wrapper specific options can be found with
the list of built-in wrappers (See L).
In addition, parameters may be set on a context
using stream_context_set_params(). Currently the only
context parameter supported by PHP is
notification. The value of this parameter must be the
name of a function to be called when an event occurs on a stream.
The notification function called during an event should accept the following
six parameters:
void my_notifier ( int notification_code, int severity, string message, int message_code, int bytes_transferred, int bytes_max)
notification_code and severity
are numerical values which correspond to the STREAM_NOTIFY_*
constants listed below.
If a descriptive message is available from the stream, message
and message_code will be populated with the appropriate values.
The meaning of these values is dependent on the specific wrapper in use.
bytes_transferred and bytes_max will
be populated when applicable.
Streams are an integral part of PHP
as of version 4.3.0. No steps are required to enable them.
User designed wrappers can be registered via stream_wrapper_register(),
using the class definition shown on that manual page.
class php_user_filter is predefined and is an abstract
baseclass for use with user defined filters. See the manual page for
stream_filter_register() for details on implementing
user defined filters.
Tyto konstanty jsou definov�ny t�mto roz���en�m a budou k dispozici pouze
tehdy, bylo-li roz���en� zkompilov�no spole�n� s PHP nebo dynamicky zavedeno
za b�hu.
Pozn�mka:
The constants marked with * are just available
in PHP 5.
As with any file or socket related function, an operation on a stream
may fail for a variety of normal reasons (i.e.: Unable to connect to remote
host, file not found, etc...). A stream related call may also fail because
the desired stream is not registered on the running system. See the array returned
by stream_get_wrappers() for a list of streams supported by your
installation of PHP. As with most PHP internal functions
if a failure occurs an E_WARNING message will be generated
describing the nature of the error.
P��klad 1. Using file_get_contents()
to retrieve data from multiple sources
<?php
$localfile = file_get_contents("/home/bar/foo.txt");
$localfile = file_get_contents("file:///home/bar/foo.txt");
$httpfile = file_get_contents("http://www.example.com/foo.txt");
$httpsfile = file_get_contents("https://www.example.com/foo.txt");
$ftpfile = file_get_contents("ftp://user:[email protected]/foo.txt");
$ftpsfile = file_get_contents("ftps://user:[email protected]/foo.txt");
?>
|
|
P��klad 2. Making a POST request to an https server
<?php
$sock = fsockopen("ssl://secure.example.com", 443, $errno, $errstr, 30);
if (!$sock) die("$errstr ($errno)\n");
$data = "foo=" . urlencode("Value for Foo") . "&bar=" . urlencode("Value for Bar");
fwrite($sock, "POST /form_action.php HTTP/1.0\r\n");
fwrite($sock, "Host: secure.example.com\r\n");
fwrite($sock, "Content-type: application/x-www-form-urlencoded\r\n");
fwrite($sock, "Content-length: " . strlen($data) . "\r\n");
fwrite($sock, "Accept: */*\r\n");
fwrite($sock, "\r\n");
fwrite($sock, "$data\r\n");
fwrite($sock, "\r\n");
$headers = "";
while ($str = trim(fgets($sock, 4096)))
$headers .= "$str\n";
echo "\n";
$body = "";
while (!feof($sock))
$body .= fgets($sock, 4096);
fclose($sock);
?>
|
|
P��klad 3. Writing data to a compressed file
<?php
$fp = fopen("compress.zlib://foo-bar.txt.gz", "wb");
if (!$fp) die("Unable to create file.");
fwrite($fp, "This is a test.\n");
fclose($fp);
?>
|
|
add a note
User Contributed Notes
Stream Functions
aidan at php dot net
22-Aug-2004 02:13
hexdump() is a function for "dumping" packets or binary output from servers. See the below link for more information.
| |