我的音频位于/ 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行来禁用“将音频保存为”菜单项,因为音频元素本身不允许这样做。
由于
答案 0 :(得分:0)
可能与解决方案相反,但答案主要是在客户端。 我会打破多个部分的音频。然后一个接一个地播放。大多数人很难合并多个视频文件。
以下是您的客户端将如何管理多部分音频: 加载音频的第一部分并开始播放。一旦你开始播放它,开始加载音频的第二部分,一旦加载第二部分是done,然后只加载第三部分,依此类推,否则大多数将遭受缓冲问题(如果你在许多部分划分)而你的服务器将比所需的更加繁忙。
视频的第一部分为complete后,立即播放第二个音频。
答案 1 :(得分:-1)
我意识到我可以这样做:
echo '<div oncontextmenu="return false;"><audio src="'.$link.'"' . ' autoplay controls></div>';
所以现在至少有些人会被吓倒。感谢。