PHP:如何阻止对文件的直接URL访问,但仍允许登录用户下载文件?
我有一个网站,用户应该可以登录并听一首歌(自己创建的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,AllowDeny from all
进入文件夹 成员, 创建文件 get_song.php 并添加以下代码:
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." );
现在,您可以使用此URL来获取歌曲文件: http : _//mysite.com/members/get_song.php?name=my-
song-
_name
以上是 PHP:如何阻止对文件的直接URL访问,但仍允许登录用户下载文件? 的全部内容, 来源链接: utcz.com/qa/426574.html