根据documentation,php://input
并不总是包含HTTP请求主体。在开始阅读之前可以知道php://输入是否包含数据?
我有一些代码的脚本启动时始终打开流,将其提供给用户的应用程序:
$stream = fopen('php://input', 'rb');
如果用户应用程序试图从空流中读取,当Content-Length > 0
,我希望我的图书馆抛出异常:
请求正文不可用。
我的问题是:
- 如果流为空,
feof()
回报false
而fread()
没有被调用; - 我不能
fread()
1字节,然后fseek()
,因为这个流不支持寻求; - 我无法打开另一个
php://input
并尝试事先读取它,因为我们不能依赖此流可以多次使用; - 出于性能原因,我不想在将用户应用程序交给用户应用程序之前将其盲目复制
php://input
至php://temp
。
因此,是可以告诉php://input
是否包含fopen()
后的数据正确,但在此之前任何fread()
?