我有一个网站,用户应该能够登录并听一首歌(自创建MP3)。 我想使它所以登录的用户可以收听/下载/不管,而该文件(不存储在MySQL数据库中)应该驻留在服务器上,但无法通过谁拥有的路径非用户访问到URL。
例如:说我的MP3是位于mysite.com/members/song.mp3如果你登录,你应该能够看到mysite.com/members/index.php页面,这将允许访问的歌曲。 MP3文件。 如果你没有登录,mysite.com/members/index.php网页不会显示你的Song.mp3的文件,并直接链接到它不应该授予访问权限。
我敢肯定,这是通过htaccess的做的,我做了很多的谷歌搜索已经和这里搜查。 我发现的两个最接近的答案是这样的htaccess指南http://perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/这个StackOverflow的问题, 通过HTTP阻止直接访问文件,但允许PHP脚本访问 ,但没有回答我所有的问题,以满足我的标准。 我在想什么?
到文件夹的成员创建新的文件夹中的文件 ,将在这里你的所有歌曲,创建新的.htaccess文件,并添加下面几行:
Order Deny,Allow
Deny from all
到文件夹创建成员文件并添加以下代码:
if( !empty( $_GET['name'] ) )
{
// check if user is logged
if( is_logged() )
{
$song_name = preg_replace( '#[^-\w]#', '', $_GET['name'] );
$song_file = "{$_SERVER['DOCUMENT_ROOT']}/members/files/{$song_name}.mp3";
if( file_exists( $song_file ) )
{
header( 'Cache-Control: public' );
header( 'Content-Description: File Transfer' );
header( "Content-Disposition: attachment; filename={$song_file}" );
header( 'Content-Type: application/mp3' );
header( 'Content-Transfer-Encoding: binary' );
readfile( $song_file );
exit;
}
}
}
die( "ERROR: invalid song or you don't have permissions to download it." );
而现在,你可以使用这个网址来获得歌曲文件:
您可以通过的.htaccess该做的唯一事情是需要来自你的网站引用者,它是不安全的。 它是超越平凡,铸就了引用者和任何人都可以吸你的网站干的。
唯一的办法,你就可以只登录用户下载的文件已经是放置你的Web根目录的文件之外,有一个PHP脚本调解访问。 简而言之:
if (is_logged_in()) {
readfile($name_of_file);
} else {
die("Access denied");
}
你是使用脚本语言如PHP来处理您的网站? 如果是的话那么最好的方法是创建一个处理内容的“交付”的脚本。 保存在一个受保护的目录中的内容,您的HTTP或www文件夹的上面IE浏览器。 然后,当用户登录时,链接到你的内容是这样的:
http://yoursite.com/listen.php?song_id=xxx
该脚本将通过ID找到所需要的歌曲,然后将数据呈现给用户
文章来源: PHP: How can I block direct URL access to a file, but still allow it to be downloaded by logged in users?