php IO流
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
01 |
//终端输入 curl -d "Hello World" -d "foo=bar&name=John"http://localhost/dev/streams/php_input.php |
02 |
//print_r($_POST)输出。注意丢失了第一个数据包 |
03 |
04 |
Array |
05 |
( |
06 |
[foo] => bar |
07 |
[name] => John |
08 |
) |
09 |
10 |
// php://input输出 |
11 |
Hello World&foo=bar&name=John |
2. 使用过滤器
01 |
//在使用 readfile(),file_get_contents(),stream_get_contents()之类的函数使,可以使用过滤器应用在打开的stream上 |
02 |
03 |
// 写入时用 str_rot13() 函数处理所有的流数据 |
04 |
file_put_contents("php://filter/write=string.rot13/resource=file:///path/to/somefile.txt","Hello World"); |
05 |
06 |
//也可以使用下面的方式 |
07 |
$h = fopen('test.txt', 'r'); |
08 |
stream_filter_append($h, 'string.rot13'); |
09 |
10 |
// Read data and encode/decode |
11 |
readfile("php://filter/read=string.toupper|string.rot13/resource=http://www.google.com"); |
3. 设置上下文(Stream Contexts)
01 |
$opts = array( |
02 |
'http'=>array( |
03 |
'method'=>"POST", |
04 |
'header'=> "Auth: SecretAuthTokenrn" . |
05 |
"Content-type: application/x-www-form-urlencodedrn" . |
06 |
"Content-length: " . strlen("Hello World"), |
07 |
'content' => 'Hello World' |
08 |
) |
09 |
); |
10 |
$default = stream_context_get_default($opts); |
11 |
readfile('http://localhost/dev/streams/php_input.php',false,$default); |
12 |
//我们模拟了一个POST包 |
13 |
//查看 php_input.php 的 apache_request_headers() 会显示结果 |
14 |
15 |
Array |
16 |
( |
17 |
[Host] => localhost |
18 |
[Auth] => SecretAuthToken |
19 |
[Content-type] => application/x-www-form-urlencoded |
20 |
|
21 |
原文:http://www.nowamagic.net/academy/detail/12220509 |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

浙公网安备 33010602011771号