2011-08-16 68 views
10
$handle = fopen("/home/rasmus/file.txt", "r"); 
$handle = fopen("/home/rasmus/file.gif", "wb"); 

我可以理解,/home/rasmus/file.txt/home/rasmus/file.gif是文件路径。php://输入 - 它在fopen()中做了什么?

但这些意味着什么:

php://input 
php://temp 

$objInputStream = fopen("php://input", "r"); 
$objTempStream = fopen("php://temp", "w+b"); 

他们做些什么?

+1

请参阅[PHP输入/输出流](http://php.net/manual/en/wrappers.php.php)。 – netcoder

回答

7

php://input是一个只读流,允许您从请求主体读取原始数据。在POST请求的情况下,它最好是$HTTP_RAW_POST_DATA,因为它不依赖于特殊的php.ini指令。此外,对于默认情况下未填充$HTTP_RAW_POST_DATA的情况,这是激活always_populate_raw_post_data的潜在更少内存密集型替代方案。 php://输入不适用于enctype="multipart/form-data"

退房手动:http://php.net/manual/en/wrappers.php.php

+0

最后一句话不再准确。设置['enable_post_data_reading = 0'](http://php.net/manual/en/ini.core.php#ini.enable-post-data-reading)将禁止解析'php:// input'流入'$ _FILES',使'php://输入'可读多部分请求。 – Dave

6

php://temp存储在一个临时文件,该文件只对脚本的执行期间访问的数据。这是一个真正的文件,但脚本终止后会立即清除,不像fopen()打开的真正文件,该文件将保留在文件系统中。

php://input用于读取原始HTTP请求主体,而无需$_POST$_SERVER变量抽象出来。当服务器将它传递给PHP解释器时,php://input流将访问整个HTTP请求。

+3

并非完全正确:*“php:// temp将在存储的数据量达到预定义限制(默认值为2 MB)时使用临时文件。”* – netcoder

3

这些是stream wrappers,并允许您从各种流中读取。读取和写入流的方式与文件相同(可能存在一些限制,例如,不是每个流包装器都支持fseek)。 php://input可让您访问原始HTTP数据(如果服务器配置为预填充,它可在$ HTTP_RAW_POST_DATA中获得)。最佳 - 阅读文档中的相应部分

+0

...那么修饰符标志会做什么? – Pacerier

相关问题