如何获得php://输入大小?

时间:2017-07-22 00:42:59

标签: php

通过实现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覆盖这些方法。

2 个答案:

答案 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'];

官方文档:http://php.net/manual/en/wrappers.php.php

参考文档:Get size of POST-request in PHP