php://input - 在fopen()中的作用是什么?

13
$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

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

他们做什么?


1
请参阅PHP输入/输出流 - netcoder
3个回答

9

php://input 是一个只读流,可让您从请求正文中读取原始数据。对于 POST 请求,使用它比依赖特殊的 php.ini 指令更好,它不依赖于 $HTTP_RAW_POST_DATA。此外,对于那些默认未填充 $HTTP_RAW_POST_DATA 的情况,php://input 可能是一种更少占用内存的潜在替代方法,而不是启用 always_populate_raw_post_data。但 enctype="multipart/form-data" 表单类型将无法使用 php://input

请查看手册:http://php.net/manual/zh/wrappers.php.php


1
最后一句话已经不准确了。设置enable_post_data_reading = 0将禁用对php://input流到$_FILES的解析,使得php://input可读取多部分请求。 - Dave

6

php://temp 会将数据存储在一个临时文件中,在脚本执行期间可访问。这是一个真实的文件,但会在脚本终止时立即被清理,与使用fopen() 打开的真实文件不同,后者会持久存在于文件系统中。

php://input 用于读取原始 HTTP 请求体,没有抽象出 $_POST$_SERVER 变量。 php://input 流将提供对服务器传递给 PHP 解释器的整个 HTTP 请求的访问权限。


3
并不完全正确:"php://temp" 一旦存储的数据量达到预定义的限制(默认为2 MB),它会使用一个临时文件。 - netcoder

3

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


那么修改器标志是做什么用的? - Pacerier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接