php://输入 - 它在fopen()中做了什么?

时间:2011-08-16 19:14:16

标签: php fopen

$handle = fopen("/home/rasmus/file.txt", "r");
$handle = fopen("/home/rasmus/file.gif", "wb");

我可以理解/home/rasmus/file.txt/home/rasmus/file.gif是文件路径。

但这些意味着什么:

php://input
php://temp

in

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

他们做了什么?

3 个答案:

答案 0 :(得分:9)

  

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

答案 1 :(得分:6)

php://temp将数据存储在临时文件中,该文件仅在脚本执行期间可访问。它是一个真实的文件,但是一旦脚本终止就会被清除,而不是用fopen()打开的真实文件,它将在文件系统上保留。

php://input用于读取原始HTTP请求正文,而不会抽象出$_POST$_SERVER个变量。当服务器将其传递给PHP解释器时,php://input流将允许访问整个HTTP请求。

答案 2 :(得分:3)

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