分块读取文件,奇怪的循环



好的,所以我正在尝试以 1048576 字节 ( 1 MB ) 的块读取一个 91kb 文件,它应该在一个块中立即读取文件,但这不是我得到的

public function uploadTmpFileFromXHRStream(){
    header('Content-type: text/html; charset=utf-8');
    function output($val)
    {
        echo $val;
        flush();
        ob_flush();
    }
    $in = fopen('php://input', 'r');
    $tmpFileId = uniqid(null,true);
    $out = fopen($tmpFileId.'_'.$_SERVER['HTTP_X_MFXHRFILEUPLOAD'], 'x');
    while($data = fread($in,1048576)){
        fwrite($out, $data);
        output(1);
        sleep(2);
    }
}

另一方面,我已经设置了javascript来监听xhr.readystatechange readyState==3,只需将输出记录到控制台即可。我在控制台中拥有的是:

200 OK 24,02s   
1
11
111
1111
11111
111111
1111111
11111111
111111111
1111111111
11111111111
111111111111

while循环中有 12 次迭代,php://input的确切文件大小为 93335。我很困惑,为什么会这样?

php://input 是一个

只读流。 从恐惧

如果流是读取缓冲的,并且它不表示纯文件,则最多读取一次最多等于块大小(通常为 8192)的字节数;根据先前缓冲的数据,返回数据的大小可能大于块大小。

php://input 是一个缓冲流,不代表纯文件。 fread一次读取一个块(8192 字节)。

文件大小/卡盘 = 读取周期计数

93335/8192 = 11.4

相关内容

  • 没有找到相关文章

最新更新