Wrapper Operations

With the exception of the url_stat() method, each of the wrapper operations located prior to the const char *label element are used with active stream instances. The purpose of each of these methods are as follows:

stream_opener()

Instantiates a stream instance. This method is called when one of the fopen() userspace functions is called. The php_stream instance returned by this function is the internal representation of a file handle resource such as what is returned by fopen(). All-in-one functions like file(), file_get_contents(), file_put_contents(), readfile(), and too many others to enumerate also use this wrapper ops method when a wrapped resource is requested.

stream_closer()

Called when a stream instance is shutting down. Any resources allocated by stream_opener() should be freed during this phase.

stream_stat()

Analogous to the userspace fstat() function, this method should fill the ssb structurewhich in practice only contains a struct statbuf sb; element.

dir_opener()

Behaves in the same way as stream_opener(), except that it's called in response to the opendir() family of userspace functions. The underlying stream implementation used by the directory streams follows the same basic rules as file streams; however, a directory stream only needs to return struct dirent-sized records containing the filename found in the opened directory.

 

Static Wrapper Operations

The remainder of the wrapper op methods perform atomic operations on URI paths according to the semantics of their protocol wrapper. Only url_stat() and unlink() existed in the PHP 4.3 php_stream_wrapper_ops structure; the remaining methods were defined in PHP 5.0 and should be excluded through appropriate #ifdef blocks.

url_stat()

Used by the stat() family of functions to return file metadata such as access permissions, size, and type; also used to access, modify, and create dates. Although this function appears in the php_stream_wrapper_ops structure all the way back to PHP 4.3 when the streams layer was introduced, it was never executed by the userspace stat() functions until PHP 5.0.

unlink()

Named according to posix filesystem semantics, an unlink() almost always refers to file deletion. If deletion does not make sense for the current wrapper, such as the built-in http:// wrapper, this method should be defined to NULL, allowing the core to issue an appropriate error message.

rename()

When both the $from and $to parameters to the userspace rename() function refer to the same underlying wrapper, PHP will dispatch the rename request to that wrapper's rename method.

mkdir() & rmdir()

These two methods map directly to their userspace counterparts.

Категории