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

本文深入探讨了PHP中的流,这是一种被低估但功能强大的特性。介绍了流的基本概念,如线性读写和定位,并详细阐述了file流和php://流封装协议的用法,包括file_get_contents、fopen等函数。特别讨论了php://stdin、php://stdout、php://input和php://output等特殊流的应用场景,如命令行输入、文件下载和接收POST数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在现代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,都是只读,读取标准输入的

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值