播放php mp3生成的文件,而不保存或下载

时间:2012-09-27 16:21:35

标签: php html

所以我正在生成mp3文件并且它工作正常,因为当我下载它我可以播放它很好,但现在我想要做的是将该文件输出到我的浏览器并在我的浏览器中播放,所以我有什么试过的是:

header("Pragma: no-cache");
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Content-Type: audio/mepeg');
header("Content-Disposition: attachment; filename=\"validate.mp3\"");
header("Content-Transfer-Encoding: binary");
header("Content-length: $size");

<embed autoplay="true" height="0" width="0" src="actions/play_file"  />

Well ofcourse id不起作用,它只是强制下载该文件,因为我已经使用了

"Content-Disposition: attachment; filename=\"validate.mp3\"")

我非常确定如果我正在使用正确的html标签? 但是,如果我是,我所需要的只是正确的标题,以使这项工作。

2 个答案:

答案 0 :(得分:1)

这是一种提取文件的方法:

header("Content-type: audio/mpeg");
header("Content-length: " . filesize($file));
header("Cache-Control: no-cache");
header("Content-Transfer-Encoding: binary"); 
readfile($file);

或者在块中

$total     = filesize($filepath);
$blocksize = (2 << 20); //2M chunks
$sent      = 0;
$handle    = fopen($filepath, "r");

// Push headers that tell what kind of file is coming down the pike
header('Content-type: '.$content_type);
header('Content-Disposition: attachment; filename='.$filename);
header('Content-length: '.$filesize * 1024);

// Now we need to loop through the file and echo out chunks of file data
// Dumping the whole file fails at > 30M!
while($sent < $total){
    echo fread($handle, $blocksize);
    $sent += $blocksize;
}

exit(0);

答案 1 :(得分:1)

重要的是指定Content-Type标题。浏览器(或其他用户代理)对它做什么取决于他们,而不是你。您现在使用的内容类型不正确。使用audio/mpeg

让它始终发挥的唯一方法是在网页上加入一名玩家。为此,您可以使用HTML5音频标签,Flash,嵌入等。