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,Allow

Deny 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

回到顶部