2

我的测试服务器是 apache 2 来工作 php 编码。我想创建一个 mp3 服务器。

一切正常,但是今天我尝试通过获取 mp3 信息、更改它、删除等来构建一个管理页面。页面中有一个播放按钮用于选定的 mp3,当单击播放按钮时,文件加载带有标题选项并播放,

示例代码在这里:

session control &
$filename = '/home/bla..bla/mp3/'. $_GET['v'] . '.mp3';
if(file_exists($filename)) {
    header('Content-Type: audio/mpeg');
    header('Content-length: '.filesize($filename));
    header('X-Pad: avoid browser bug');
    header('Cache-Control: no-cache');
    readfile($filename);
}else{
    exit();
}

一切看起来都很好,但是当我单击另一个按钮时(例如,使用 ajax 代码再次搜索 mp3 或在同一页面中使用 javascript 获取值)什么也没有发生。

页面正在等待加载 mp3 文件。看起来像阻止请求。当 mp3 加载 %60 或 %70 时,查询即将到来。

如果我找不到解决方案,我将成为杀手 :)

ps:我的系统建立apache2, PHP5 , MySQL,在管理页面中使用音频标签,但与jplayer.

4

1 回答 1

1

很可能您遇到了会话锁定。当请求您所在的页面时session_start(),会打开并锁定会话文件以防止并发访问出现问题。该文件保持锁定状态,直到当前脚本完成。当文件被锁定时,其他进程无法访问它,并会等到它被解锁。

在您执行任何长时间运行的任务(例如流式传输 MP3 文件)之前,请使用session_write_close.

更好的是,让 Web 服务器处理流文件的普通任务,不要让 PHP 进程忙于处理它。尝试mod_xsendfile

于 2013-01-15T04:37:47.867 回答