通过实现PSR-7 StreamInterface为我的API构建流实现。在我的测试中,我使用php://input
,但由于某种原因,它不会计算正确的大小。它正在返回null
。但是,它适用于其他文件。
class Stream implements StreamInterface
{
public function __construct($resource)
{
$this->resource = $resource;
$this->meta = $this->getMetadata();
$this->size = $this->calculateSize();
$this->isReadable = $this->isModeable('readable');
$this->isWritable = $this->isModeable('writable');
}
private function calculateSize() // RETURNS NULL FOR PHP://INPUT??
{
$stats = fstat($this->resource); // this is evaluating to false;
return isset($stats['size']) ? $stats['size'] : null;
}
}
我想也许我不能用php://input
执行此操作,我需要做的是继承我的Stream
类并专门为php://input
覆盖这些方法。
答案 0 :(得分:0)
php://input
不是文件,因此fstat()
无法处理任何内容。
所以,是的,你将需要特殊情况php://input
答案 1 :(得分:0)
php:// input是一个只读流,允许您读取原始数据 来自请求机构。在POST请求的情况下,它是可取的 使用php://输入而不是$ HTTP_RAW_POST_DATA,因为它没有 依赖于特殊的php.ini指令。
以便读取http post请求的大小
$rqsize = (int) $_SERVER['CONTENT_LENGTH'];