繁体   English   中英

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

[英]Play php mp3 generated file without saving it or downloading

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

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"  />

好吧,当然 id 不起作用,它只是强制下载该文件,因为我已经使用过

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

我很确定我是否为此使用了正确的 html 标签? 但如果我是,我所需要的只是正确的标题来完成这项工作。

这是一种输入文件的方法:

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);

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

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

...还有...另一种更简单的方法...自从一家名为 Ivona 的波兰公司于 2013 年 1 月 24 日被亚马逊收购以来,我就一直在测试这种方法,所以它被证明是可行的设置您的 AWS Polly 凭据后,即开即用。

    header('Accept-Ranges: none');
    header('Content-Type: audio/mpeg');

    echo $audio;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM