如下内容整理添加自:php
Understanding Streams in PHPhtml
使用 <scheme>://<target>
的格式来进行stream的操做。apache
好比使用 file://
协议来访问文件系统api
readfile('/path/to/somefile.txt') readfile('file:///path/to/somefile.txt') //二者是等价的
查看本地PHP内置支持的协议和封装协议,使用app
print_r(stream_get_wrappers());
返回curl
Array ( [0] => https [1] => ftps [2] => compress.zlib [3] => compress.bzip2 [4] => php [5] => file [6] => glob [7] => data [8] => http [9] => ftp [10] => zip [11] => phar )
获取本地的socket支持状况和过滤器(用法在后面)支持状况使用socket
print_r(stream_get_transports()); print_r(stream_get_filters());
将会返回tcp
Array ( [0] => tcp [1] => udp [2] => unix [3] => udg [4] => ssl [5] => sslv3 [6] => sslv2 [7] => tls ) //transports Array ( [0] => zlib.* [1] => bzip2.* [2] => convert.iconv.* [3] => string.rot13 [4] => string.toupper [5] => string.tolower [6] => string.strip_tags [7] => convert.* [8] => consumed [9] => dechunk [10] => mcrypt.* [11] => mdecrypt.* ) //filters
除此以外还有不少第三方库能够选择:函数
PHP://Wrapper
是PHP本身的I/O流访问的封装google
包括
- php://stdin
- 访问PHP进程相应的输入流,好比用在获取cli执行脚本时的键盘输入
- php://stdout
- 访问PHP进程相应的输出流
- php://stderr
- 访问PHP进程相应的错误输出
- php://input
- 访问请求的原始数据的只读流
- php://output
- 只写的数据流,以 print 和 echo 同样的方式写入到输出区
- php://fd
- 容许直接访问指定的文件描述符。例 php://fd/3 引用了文件描述符 3
- php://memory
- 容许读写临时数据。 把数据储存在内存中
- php://temp
- 同上,会在内存量达到预约义的限制后(默认是 2MB)存入临时文件中
- php://filter
- 过滤器
php://stdin 是只读的, php://stdout 和 php://stderr 是只写的。
直接上例子:
1 php://input
//终端输入 curl -d "Hello World" -d "foo=bar&name=John" http://localhost/dev/streams/php_input.php //print_r($_POST)输出。注意丢失了第一个数据包 Array ( [foo] => bar [name] => John ) //php://input输出 Hello World&foo=bar&name=John
2 使用过滤器
//在使用 readfile(),file_get_contents(),stream_get_contents()之类的函数使,能够使用过滤器应用在打开的stream上 // 写入时用 str_rot13() 函数处理全部的流数据 file_put_contents("php://filter/write=string.rot13/resource=file:///path/to/somefile.txt","Hello World"); //也能够使用下面的方式 $h = fopen('test.txt', 'r'); stream_filter_append($h, 'string.rot13'); // Read data and encode/decode readfile("php://filter/read=string.toupper|string.rot13/resource=http://www.google.com");
3 设置上下文(Stream Contexts)
$opts = array( 'http'=>array( 'method'=>"POST", 'header'=> "Auth: SecretAuthTokenrn" . "Content-type: application/x-www-form-urlencodedrn" . "Content-length: " . strlen("Hello World"), 'content' => 'Hello World' ) ); $default = stream_context_get_default($opts); readfile('http://localhost/dev/streams/php_input.php',false,$default); //咱们模拟了一个POST包 //查看 php_input.php 的 apache_request_headers() 会显示结果 Array ( [Host] => localhost [Auth] => SecretAuthToken [Content-type] => application/x-www-form-urlencoded [Content-length] => 11 )