【问题标题】:php://input - what does it do in fopen()?php://input - 它在 fopen() 中做了什么?
【发布时间】:2011-10-28 08:41:28
【问题描述】:
$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");

他们是做什么的?

【问题讨论】:

标签: php fopen


【解决方案1】:

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

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

【讨论】:

  • 最后一句话不再准确。设置enable_post_data_reading = 0 将禁用将php://input 流解析为$_FILES,使php://input 对多部分请求可读。
【解决方案2】:

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

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

【讨论】:

  • 不完全正确:“一旦存储的数据量达到预定义的限制(默认为 2 MB),php://temp 将使用临时文件。”
【解决方案3】:

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

【讨论】:

  • ...那么修饰符标志有什么作用?
猜你喜欢
  • 2019-11-13
  • 2010-10-26
  • 2013-09-04
  • 1970-01-01
  • 2010-09-20
  • 2012-06-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多