首先,如果我在搜索时已经问过这个问题并且找不到确切的问题和答案,我会道歉。
所以让我们开始我想强制.mp3文件下载而不是播放因此我在download.php中使用以下代码
<?php
/**
* Download the mp3 file.
*/
$file_name = $_GET["filename"];
$file_url = $_GET["fileurl"];
header("Content-Description: File Transfer");
header('Content-type: application/mp3');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"".$file_name."\"");
readfile($file_url);
exit;
因此,当用户点击目的地为http://www.example.com/download.php?filename=example.mp3&url=http://www.example.com/example.mp3的链接时,可以保存文件。
所以我想要的是阻止直接访问文件http://www.example.com/download.php
并允许用户使用网址下载文件:http://www.example.com/download.php?filename=example.mp3&url=http://www.example.com/example.mp3
答案 0 :(得分:0)
如果您使用的是apache服务器,则可以使用.htaccess拒绝访问某些文件。
以下是您可以添加到.htaccess
文件的示例:
<Files /example.mp3>
Order Allow,Deny
Allow from all
</Files>
答案 1 :(得分:0)
你的意思是这样吗?
if($_GET['filename'] == ''){
header("Location: http://someLocation.com/");
}
答案 2 :(得分:0)
首先,从请求中定义的参数盲目地调用readfile()
会带来巨大的安全风险。
我的建议是只接受文件名,然后构建一个包含文件名和mp3文件夹路径的完整文件路径。然后确保该文件存在,然后执行readfile()
注意您的mp3文件夹应该在公共html文件夹之外,或者如果没有,至少为您的Web服务器配置一个阻止直接访问该文件夹的访问规则。
其次,阻止访问没有参数的php文件的唯一方法是使用重写规则(如果您的Web服务器支持它)
更简单的方法可能是检查是否没有文件名参数,然后有默认行为,即重定向到主页等。这也可能是指定文件不存在的默认行为。
最后,我有一个你可能会觉得有用的GitHub项目 - 如果没有其他的话,那就是想法: