我正在尝试为广播电台的一个非常大的 FLAC 音乐库开发一个在线管理系统。它有一个强大的服务器,用户不多,所以我希望能够提供文件下载服务,PHP 根据端点的需要将 FLAC 文件转码为 MP3/WAV。
这工作正常:
if($filetype == "wav") {
header("Content-Length: ". $bitrate * $audio->get_length());
$command = "flac -c -d ".$audio->get_filename().".flac";
}
ob_end_flush();
$handle = popen($command, "r");
while($read = fread($handle, 8192)) echo $read;
pclose($handle);
并允许服务器在转码(好吧,在这种情况下是解码)完成之前开始将文件发送给用户,以获得最大速度。
但是,我遇到的问题是,在执行此脚本时,我无法让 Apache 处理整个域上的任何其他请求。它仍然可以在同一台机器上的其他 VirtualHosts 上正常工作,但是当一个人碰巧正在下载文件时,没有人可以加载该网站上的任何页面。
我也尝试过使用proc_open
没有区别的方法来实现相同的东西,并且已经使用了 Apache 设置来设置工人数量等。
在我开始向用户发送文件之前,停止这种行为的唯一方法是使用类似的东西exec
并等待编码过程完成吗?因为这似乎不是最理想的!:(
更新:似乎其他人仍然可以访问该网站,但不是我 - 即它与会话有关。这让我更加困惑!