在php中检测文件的缓冲大小

在php中检测文件的缓冲大小,php,stream,streaming,Php,Stream,Streaming,当我使用php为文件提供服务时,如何检测用户是否缓冲了文件的一半 我想在下载或流式传输文件时,当用户到达文件的一半时,为文件添加统计信息 例如,有一个3MB的文件,我需要在用户通过流式传输达到数据库的一半时向数据库添加统计数据 while(!feof($fm) && $cur <= $end && (connection_status() == 0)) { if(!isset($_SESSION['plays'][$pid]

当我使用php为文件提供服务时,如何检测用户是否缓冲了文件的一半

我想在下载或流式传输文件时,当用户到达文件的一半时,为文件添加统计信息

例如,有一个3MB的文件,我需要在用户通过流式传输达到数据库的一半时向数据库添加统计数据


    while(!feof($fm) && $cur <= $end && (connection_status() == 0))
    {
        if(!isset($_SESSION['plays'][$pid])) {
            $_SESSION['plays'][$pid] = [
                'status' => 0,
                'buffered' => 0,
                'passed' => $size/2
            ];
        }
        $bytes = min(1024 * 16, ($end - $cur) + 1);
        ob_flush();
        flush();
        echo fread($fm, $bytes);
        $cur += 1024 * 16;
        $_SESSION['plays'][$pid]['buffered'] += $bytes;
        if(!$_SESSION['plays'][$pid]['status'] && $_SESSION['plays'][$pid]['buffered']>$_SESSION['plays'][$pid]['passed']) {
            $_SESSION['plays'][$pid]['status'] = 1;
            $dataToSend = [
                'ip' => $_SERVER['REMOTE_ADDR'],
                'user_id' => $userId,
                'post_id' => $pid,
                'type' => 'play',
                'client_id' => isset($decoded->aud) ? $decoded->aud : null,
            ];
        }
        ob_flush();
        flush();
    }

而(!feof($fm)和&$cur 0,
'缓冲'=>0,
“已通过”=>$size/2
];
}
$bytes=min(1024*16,($end-$cur)+1);
ob_flush();
冲洗();
echo-fread($fm,$bytes);
$cur+=1024*16;
$\会话['plays'][$pid]['buffered']+=$字节;
如果(!$\u会话['plays'][$pid]['status']&&$\u会话['plays'][$pid]['buffered']>$\u会话['plays'][$pid]['passed'])){
$\会话['plays'][$pid]['status']=1;
$dataToSend=[
“ip”=>$\u服务器[“远程地址”],
'user_id'=>$userId,
“post_id”=>$pid,
“键入”=>“播放”,
“客户端id”=>isset($decoded->aud)?$decoded->aud:null,
];
}
ob_flush();
冲洗();
}