• PHP对自己I/O流访问的封装

    PHP://Wrapper
    服务器君一共花费 16.846 ms 进行了 3 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    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
    )
    
更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [搜索引擎优化] 与百度权重有关的信息 2 个条目
  2. [智力开发与知识管理] 信息的类型与结构 9 个条目
  3. [Python程序设计] Tornado源码解析 23 个条目
  4. [JavaScript程序设计] jQuery与表单操作 2 个条目
  5. [数据库技术] MySQL中英文混合排序 4 个条目
  6. [软件工程与项目管理] 了解一点WebKit 9 个条目
  7. [Linux操作系统] CentOS上使用EPEL Repository 2 个条目
  8. [JavaScript程序设计] 关于HTTP Keep-Alive 6 个条目
  9. [运维管理] 防火墙原理与应用 5 个条目
  10. [Python程序设计] Django 入门知识浅介 10 个条目
  11. [Python程序设计] 从PHP到Python 3 个条目
  12. [Python程序设计] Django模板系统 11 个条目
窗口 -- [协会]