【问题标题】:Can I serve MP3 files with PHP?我可以使用 PHP 提供 MP3 文件吗?
【发布时间】:2010-12-03 18:02:59
【问题描述】:

与使用 php 提供图像的方式相同,用于 CAPTACHAS 等,是否可以对音频文件执行相同的操作?

我试过了

<?php

$track = "sometrack.mp3";

if(file_exists($track)) {
    header('Content-type: audio/mpeg');
    header('Content-length: ' . filesize($track));
    header('Content-Disposition: filename="sometrack.mp3"');
    header('X-Pad: avoid browser bug');
    header('Cache-Control: no-cache');
    print file_get_contents($track);
} else {
    echo "no file";
}

我正在使用 Safari,它可以播放 MP3 文件。它让 Safari 进入了正确的模式,我得到了 Quicktime 控件几秒钟,然后是“无视频”。

我正在尝试保护文件免遭未经授权的下载,以防您想知道我为什么要这样做。

【问题讨论】:

  • 你应该能够 - 不知道为什么这不起作用,但你在正确的路线上。从您访问文件的 url 上的命令行尝试 wget/curl,并检查它是否按预期工作。

标签: php security http-headers mp3


【解决方案1】:

您的内容处置应该是:

header('Content-Disposition: attachment; filename="sometrack.mp3"');

但不确定这是否是问题所在。我还建议使用readfile 来输出文件:

readfile($rSong);

此外,使用详尽的 Content-Type 标头并设置 Content-Transfer-Encoding 也无妨:

header("Content-Transfer-Encoding: binary"); 
header("Content-Type: audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3"); 

【讨论】:

  • 那些额外的标题让一切变得不同!谢谢。虽然我现在删除了“附件”,因为我想在浏览器中播放曲目,但是当人们下载曲目时我需要使用它。很好的建议,谢谢。
  • 注意XSendfile(在Apacha和nginx otoh上)可以严重降低服务器/php的负载,仍然可以使用文档根目录外的文档。
【解决方案2】:

尝试使用This Class它支持下载恢复和速度限制相信我你需要它作为mp3下载网站的所有者

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-27
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多