浅谈php流介绍以及使用(一)

在现代php特性中,流或许是最出色也是最少使用的,虽然PHP在4.3中就已经引入了流,但是很多开发者不知道流的存在

,因为开发者很少提及流,流的文档也及其缺乏。流是具有流式行为的资源对象,因此,流可以线性读写,还可以使用fseek()在函数中定位到流的位置。《php手册》

每个流都有一个协议和一个目标:

<scheme>://<target>

file流封装协议:

我们使用file_get_contents();,fopen();fwrite();fclose();

下面简单介绍下:

浅谈php流介绍以及使用(一)

可以看出两次运行结果是一样的,我们通常会省略file://,因为这是PHP使用的默认值

php://流封装协议

php://stdin ;数据来自标准输入 可用用来接收命令行信息

 

浅谈php流介绍以及使用(一)

但是通常使用 STDIN,来打开已经封装好的流协议

浅谈php流介绍以及使用(一)

效果是一样的;

php://stdout:只能写,无法寻其位置:搭配php://stdin 或者STDOUT

浅谈php流介绍以及使用(一)

php://input:只读输入流,用于获取输入的信息,比如说接口接收数据

浅谈php流介绍以及使用(一)

这里我用于支付接收回调参数, php://input 是个可以访问请求的原始数据的只读流。 POST 请求的情况下,最好使用 php://input 来代替 $HTTP_RAW_POST_DATA,因为它不依赖于特定的 php.ini 指令。 而且,这样的情况下 $HTTP_RAW_POST_DATA 默认没有填充, 比** always_populate_raw_post_data 潜在需要更少的内存。 enctype="multipart/form-data" 的时候 php://input 是无效的。

浅谈php流介绍以及使用(一) php:://output 只写输出流,这里用于文件下载

 

 

浅谈php流介绍以及使用(一)

php://temp 和php://memory相似,但是当没有可用内存时,会将数据写入文件,建议用php://temp

$fiveMBs = 5 * 1024 * 1024;
$fp = fopen("php://temp/maxmemory:$fiveMBs", 'r+');

fputs($fp, "hello\n");

// Read what we have written.
rewind($fp);
echo stream_get_contents($fp);

然后到这里介绍完基本了其实还有

php://stderr 和php://stdout,都是只读,读取标准输入的