好吧,所以我试图读取一个91kb的文件,以1048576
字节为单位(1 MB),应该以一个块的形式即时读取文件,但是这不是我要的
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
循环中有12次迭代while
,确切的文件大小php://input
为93335。我很困惑,为什么会这样?
php:// input是只读流。从恐惧
如果该流被读取缓冲并且不表示一个普通文件,则最多读取一次等于该块大小的字节数(通常为8192);根据先前缓冲的数据,返回数据的大小可能大于块大小。
php:// input是一个不代表纯文件的缓冲流。fread
正在一次读取一个块(8192字节)。
文件大小/卡盘=读取周期数
93335/8192 = 11.4
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句