浅谈php流介绍以及使用(一)
在现代php特性中,流或许是最出色也是最少使用的,虽然PHP在4.3中就已经引入了流,但是很多开发者不知道流的存在
,因为开发者很少提及流,流的文档也及其缺乏。流是具有流式行为的资源对象,因此,流可以线性读写,还可以使用fseek()在函数中定位到流的位置。《php手册》
每个流都有一个协议和一个目标:
<scheme>://<target>
file流封装协议:
我们使用file_get_contents();,fopen();fwrite();fclose();
下面简单介绍下:
可以看出两次运行结果是一样的,我们通常会省略file://,因为这是PHP使用的默认值
php://流封装协议
php://stdin ;数据来自标准输入 可用用来接收命令行信息
但是通常使用 STDIN,来打开已经封装好的流协议
效果是一样的;
php://stdout:只能写,无法寻其位置:搭配php://stdin 或者STDOUT
php://input:只读输入流,用于获取输入的信息,比如说接口接收数据
这里我用于支付接收回调参数, 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:://output 只写输出流,这里用于文件下载
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,都是只读,读取标准输入的