This article mainly introduces the detailed introduction and use of PHP Streams (stream). PHP Streams is a built-in core operation, which may be general It is rarely used by developers. It is used to unify file, network, data compression and other file-like operations, and provides a set of common function interfaces for these file-like operations. Friends who need it can refer to it
PHP Streams is a built-in core operation that may be rarely used by ordinary developers. It is used to unify file, network, data compression and other file-like operations, and provides a set of common function interfaces for these file-like operations.
A stream is a resource object with streaming behavior. Each stream object has a wrapper class. Stream can be referenced via
Let’s take a look at the built-in packaging classes that PHP has by default:
?
2 3 4
|
print_r(stream_get_wrappers()); /* Array ( [0] => php [1] => file [2] => glob [3] => data [4] => http [5] => ftp [6] => zip [7] => compress.zlib [8] => https [9] => ftps [10] => phar ) */ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | /* Read local file from /home/bar */ $localfile = file_get_contents ( "/home/bar/foo.txt" ); /* Identical to above, explicitly naming FILE scheme */ $localfile = file_get_contents ( "file:///home/bar/foo.txt" ); /* Read remote file from www.example.com using HTTP */ $httpfile = file_get_contents ( "http://www.example.com/foo.txt" ); /* Read remote file from www.example.com using HTTPS */ $httpsfile = file_get_contents ( "https://www.example.com/foo.txt" ); /* Read remote file from ftp.example.com using FTP */ $ftpfile = file_get_contents ( "ftp://user:pass@ftp.example.com/foo.txt" ); /* Read remote file from ftp.example.com using FTPS */ $ftpsfile = file_get_contents ( "ftps://user:pass@ftp.example.com/foo.txt" ); |
Actually readfile('/path/to/somefile.txt') or readfile('file:///path/to/somefile.txt'), these two methods are equivalent. Because PHP's default packaging class is file://.
The manual clearly states that you can register your own wrapper through stream_register_wrapper(). You can check out the examples in the manual.
OK, here is a brief introduction to PHP://, which is a wrapper class used by PHP to handle IO streams (click here to see an example). More powerful input and output streams can be accessed via PHP://:
php://stdin: Access the corresponding input stream of the PHP process, such as used to obtain keyboard input when cli executes a script.
php://stdout: access the corresponding output stream of the PHP process.
php://stderr: access the corresponding error output of the PHP process.
php://input: A read-only stream that accesses the requested raw data.
php://output: a write-only data stream, written to the output area in the same way as print and echo.
php://fd: allows direct access to the specified file descriptor. Example php://fd/3 refers to file descriptor 3.
php://memory: allows reading and writing temporary data. Store data in memory.
php://temp: Same as above, it will be stored in a temporary file after the amount of memory reaches the predefined limit (default is 2MB).
php://filter: filter.
PHP can also modify and enhance packaging classes through context and filter.
(1) Regarding context, for example, PHP uses stream_context_create() to set the timeout for obtaining files. You must have used this code:
?
2 3
|
$opts = array( 'http'=>array( 'method'=>"GET", 'timeout'=>60, ) ); $context = stream_context_create($opts); $html =file_get_contents('http://www.jb51.net', false, $context); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | print_r(stream_get_filters()); /* Array ( [0] => convert.iconv.* [1] => mcrypt.* [2] => mdecrypt.* [3] => string.rot13 [4] => string.toupper [5] => string.tolower [6] => string.strip_tags [7] => convert.* [8] => consumed [9] => dechunk [10] => zlib.* ) */ |
Custom filters can be created through stream_filter_register() and the built-in php_user_filter, as follows:
?
|
/* Define our filter class */ class strtoupper_filter extends php_user_filter { function filter ( $in , $out , & $consumed , $closing ) { while ( $bucket = stream_bucket_make_writeable ( $in )) { $bucket -> data = strtoupper ( $bucket -> data ); $consumed = $bucket -> datalen ; stream_bucket_append ( $out , $bucket ); } return PSFS_PASS_ON ; } } /* Register our filter with PHP */ stream_filter_register ( "strtoupper" , "strtoupper_filter" ) or die( "Failed to register filter" ); $fp = fopen ( "foo-bar.txt" , "w" ); /* Attach the registered filter to the stream just opened */ stream_filter_append ( $fp , "strtoupper" ); fwrite ( $fp , "Line1n" ); fwrite ( $fp , "Word - 2n" ); fwrite ( $fp , "Easy As 123n" ); fclose ( $fp ); readfile ( "foo-bar.txt" ); /* The results are as follows: LINE1 WORD - 2 EASY AS 123 */ |
The list of streams functions in PHP is provided as follows:
?
10 11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
stream_bucket_append function: add data to the queue stream_bucket_make_writeable function: Returns a data object from the operation queue stream_bucket_new function: Create a new data for the current queue stream_bucket_prepend function: prepare data into the queue stream_context_create function: Create a data flow context stream_context_get_default function: Get the default data flow context stream_context_get_options function: Get the settings of the data stream stream_context_set_option function: Set data stream, data packet or context stream_context_set_params function: Set parameters for data stream, packet or context stream_copy_to_stream function: copy between data streams stream_filter_append function: add a filter to the data stream stream_filter_prepend function: add filters for data stream preparation stream_filter_register function: register a data stream filter and execute it as a PHP class stream_filter_remove function: removes a filter from a data stream stream_get_contents function: Read the remaining data in the data stream into a string stream_get_filters function: returns a list of registered data stream filters stream_get_line function: Get the line from the data stream resource according to the given delimiter stream_get_meta_data function: Get header/metadata from encapsulated protocol file pointer stream_get_transports function: Returns the registered Socket transport list stream_get_wrappers function: returns the registered data stream list stream_register_wrapper function: Register a URL wrapper protocol implemented with PHP class stream_select function: receives data stream arrays and waits for their status to change stream_set_blocking function: Set a data stream to a blocking or non-blocking state stream_set_timeout function: Set timeout for data stream stream_set_write_buffer function: Set buffer for data stream stream_socket_accept function: accept the Socket connection created by the function stream_socket_server() stream_socket_client function: Open the Socket connection of the network or UNIX host stream_socket_enable_crypto function: Turn on or off data encryption for a connected Socket stream_socket_get_name function: Get the name of local or network Socket stream_socket_pair function: Create two indistinguishable Socket data stream connections stream_socket_recvfrom function: Get data from Socket, regardless of whether it is connected or not stream_socket_sendto function: Send data to Socket, regardless of whether it is connected or not stream_socket_server function: Create a network or UNIX Socket server stream_wrapper_restore function: restore a previously logged-out data package stream_wrapper_unregister function: Unregister a URL address package |