Php 如何处理同时阅读和写作

Php 如何处理同时阅读和写作,php,file,audio,streaming,mp3,Php,File,Audio,Streaming,Mp3,我有一个服务器,可以从源文件中获取mp3音频缓冲区,并通过php将其写入文件。它会截断文件的开头,因此文件大小永远不会超过2MB。同时,客户机通过查找到末尾并读取是否有任何新数据来流式播放mp3。问题是当文件get被截断时,客户端正在读取的位置发生了变化 这是流式传输音频的客户端: $handle = fopen('cool.mp3', "r"); $err = fseek($handle, 0, SEEK_END); while(file_exists($file_lock)){ // coo

我有一个服务器,可以从源文件中获取mp3音频缓冲区,并通过php将其写入文件。它会截断文件的开头,因此文件大小永远不会超过2MB。同时,客户机通过查找到末尾并读取是否有任何新数据来流式播放mp3。问题是当文件get被截断时,客户端正在读取的位置发生了变化

这是流式传输音频的客户端:

$handle = fopen('cool.mp3', "r");
$err = fseek($handle, 0, SEEK_END);
while(file_exists($file_lock)){ // cool.mp3.lock means stream is still going
    $data = fread($handle, 1024);
    echo $data;
    ob_flush();
    flush();
}
我在服务器上使用它在获取数据时写入数据:

$data = "audio frames....";
clearstatcache();
$file = 'cool.mp3';
if(filesize($file) > 1024*200){ //2 MB
    ftruncatestart($file, 1024*25); //Trim Down By Deleting Front
}
file_put_contents($file, $data, FILE_APPEND); 

服务器可能需要更新另一个跟踪偏移量的文件,然后客户端可以通过检查偏移量的差异来推断正确的位置。@制作者:这是否适用于多个客户端?我认为是这样,因为每个客户端都可以独立计算需要查找的位置。