PHP:我怎样才能阻止对文件的直接URL访问,但是仍然允许它可以通过下载的用户登录?PHP:我怎样才

2019-05-13 09:13发布

我有一个网站,用户应该能够登录并听一首歌(自创建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脚本访问 ,但没有回答我所有的问题,以满足我的标准。 我在想什么?

Answer 1:

到文件夹的成员创建新的文件夹中的文件 ,将在这里你的所有歌曲,创建新的.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." );


而现在,你可以使用这个网址来获得歌曲文件:



Answer 2:

您可以通过的.htaccess该做的唯一事情是需要来自你的网站引用者,它是不安全的。 它是超越平凡,铸就了引用者和任何人都可以吸你的网站干的。

唯一的办法,你就可以只登录用户下载的文件已经是放置你的Web根目录的文件之外,有一个PHP脚本调解访问。 简而言之:

if (is_logged_in()) {
   readfile($name_of_file);
} else {
   die("Access denied");
}


Answer 3:

你是使用脚本语言如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?