• 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
)

PHP对自己I/O流访问的封装(转)的更多相关文章

  1. ios开发瀑布流框架的封装

    一:瀑布流框架封装的实现思路:此瀑布流框架的封装仿照tableView的底层实现,1:每个cell的frame的设置都是找出每列的最大y值,比较每列的最大y值,将下一个cell放在最大y值最小的那一列 ...

  2. C++实现对lua访问的封装

    这是一个几年前写的对lua的访问封装,当时的项目仅提供了最基本的lua访问接口:调用lua函数,向lua注册标准格式的C++函数. 本来我想引进luabind,但luabind相对又过于复杂,并不是所 ...

  3. php的数据访问和封装运用

    php数据访问: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...

  4. 封装类的方式访问数据库(封装字符串、json)

    <?php class DBDA { public $host="localhost";//服务器地址 public $uid="root";//用户名 ...

  5. UDP(socket)数据访问和封装情况C++代码

     配置QT下的pro文件 TEMPLATE = app CONFIG += console CONFIG -= app_bundle CONFIG -= qt   LIBS += -lWs2_32 ...

  6. 各语言最原始数据库访问组件封装DBHelper

    源码:https://github.com/easonjim/DBHelper bug提交:https://github.com/easonjim/DBHelper/issues 每个语言放在不同的分 ...

  7. Java API —— IO流(数据操作流 & 内存操作流 & 打印流 & 标准输入输出流 & 随机访问流 & 合并流 & 序列化流 & Properties & NIO)

    1.操作基本数据类型的流     1) 操作基本数据类型 · DataInputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型.应用程序可以使用数据输出 ...

  8. (转载)H.264码流的RTP封包说明

    H.264的NALU,RTP封包说明(转自牛人) 2010-06-30 16:28 H.264 RTP payload 格式 H.264 视频 RTP 负载格式 1. 网络抽象层单元类型 (NALU) ...

  9. java io 流分类表

    Java输入/输出流体系中常用的流分类(表内容来自java疯狂讲义) 注:下表中带下划线的是抽象类,不能创建对象.粗体部分是节点流,其他就是常用的处理流. 流分类 使用分类 字节输入流 字节输出流 字 ...

随机推荐

  1. express创建项目

    sudo apt-get install node-express-generator dave@voctrals:~/WebstormProjects/nodejs-study/express$ e ...

  2. jquery checkbox反复调用attr('checked', true/false)只有第一次生效

    /** * 全选 */ function checkAll() { $("input[name=ids]").attr("checked", true); } ...

  3. 双节点(nginx+keepalived)为两台apache服务器提供负载均衡

    说明:本实验为双节点nginx为两台apache服务器提供负载均衡,本文不是做lvs,所以realserver不是配置在keepalived.conf而是在nginx的配置文件中upstream.此架 ...

  4. Oracle正确删除archivelog文件(转)

    from:http://www.itpub.net/thread-1636118-6-1.html Oracle在开启了归档模式后,会在指定的archive目录下产生很多的archivelog文件,而 ...

  5. Android总结篇系列:Activity Intent Flags及Task相关属性

    同上文一样,本文主要引用自网上现有博文,并加上一些自己的理解,在此感谢原作者. 原文地址: http://blog.csdn.net/liuhe688/article/details/6761337 ...

  6. Android OpenCV 图像识别

    最近打算写一个android 平台opencv 的小程序,着手查找了一下资料.网络上的资料参差不齐,有一些都比较老旧,我参考了前面的方法找到了一个简单的搭建方法,分享给大家. 0,环境的搭建: jav ...

  7. ADF_Controller系列3_通过创建ADF Menu作为页面向导(Part1)

    2015-02-15 Created By BaoXinjian

  8. 一、Maya API简介

    #include <maya/MSimple.h> #include <maya/MIOStream.h> DeclareSimpleCommand( hello, " ...

  9. AX2012 referencegroup

    用referencegroup 1.添加EDT,refrecid 2.修改autoidentification 3. 可以直接拖refrecid字段出来,就是referencegroup了

  10. 在linux下获取帮助

    1.使用man手册页 man是一种显示Unix/Linux在线手册的命令.可以用来查看命令.函数或文件的帮助手册,另外它还可以显示一些gzip压缩格式的文件. 读者在遇到不懂的命令时,可以用man查看 ...