通过PHP如何让人们更难以在HTML5中下载音频?

时间:2015-08-30 16:10:32

标签: php html5 mp3

我的音频位于/ home / user / audio。我知道防止下载是不可能的,但我只是想让大多数人都难以接受。我关注了这篇文章:setting-up-apache-to-serve-php-when-an-mp3-file-is-requested

但是当右键单击音频元素时,人们仍然可以通过选择“将音频另存为”来轻松下载mp3。

以下是链接音频的页面上的代码:

$link="http://www.example.com/getaudio.php?name=$filename";
echo  '<audio src="'.$link.'"' . ' autoplay controls>';

这是getaudio.php

$name=$_GET['name'];
$filename="/home/user/audio/".$name.".mp3";
if (file_exists($filename)) {
    header("Content-Type: audio/mpeg");
    header('Content-Length: ' . filesize($filename));
    header('Content-Disposition: inline; filename="blah.mp3"');
    header('X-Pad: avoid browser bug');
    header('Cache-Control: no-cache');
    readfile($filename);
    exit;
} else {
    header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found', true, 404);
    echo "no file";
}

任何想法为什么尽管如此,人们可以这么容易地下载mp3?在链接的例子中,我没有看到任何明显的遗漏,但我必须遗漏一些明显的东西!

编辑:我的帖子与上面提到的不同,因为我试图避免使用javascript方法,而是使用php,并禁用“将音频另存为”菜单项。最后,我最终使用单个js行来禁用“将音频保存为”菜单项,因为音频元素本身不允许这样做。

由于

2 个答案:

答案 0 :(得分:0)

可能与解决方案相反,但答案主要是在客户端。 我会打破多个部分的音频。然后一个接一个地播放。大多数人很难合并多个视频文件。

以下是您的客户端将如何管理多部分音频: 加载音频的第一部分并开始播放。一旦你开始播放它,开始加载音频的第二部分,一旦加载第二部分是done,然后只加载第三部分,依此类推,否则大多数将遭受缓冲问题(如果你在许多部分划分)而你的服务器将比所需的更加繁忙。

视频的第一部分为complete后,立即播放第二个音频。

答案 1 :(得分:-1)

我意识到我可以这样做:

echo  '<div oncontextmenu="return false;"><audio src="'.$link.'"' . ' autoplay controls></div>';

所以现在至少有些人会被吓倒。感谢。