以下内容整理添加自:
基础
使用 <scheme>://<target>
的格式来进行stream的操作。
比如使用 file://
协议来访问文件系统
readfile('/path/to/somefile.txt')
readfile('file:///path/to/somefile.txt')
//两者是等价的
查看本地PHP内置支持的协议和封装协议,使用
print_r(stream_get_wrappers());
返回
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支持情况和过滤器(用法在后面)支持情况使用
print_r(stream_get_transports());
print_r(stream_get_filters());
将会返回
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://Wrapper
是PHP自己的I/O流访问的封装
包括
- 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
)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。