如何阻止直接下载文件

时间:2016-09-17 19:03:57

标签: php .htaccess web

我的网站包含一些下载内容。我想访问仅为登录用户下载此文件。

如果用户在浏览器中键入直接文件URL,则在用户未登录时显示禁止页面。不使用任何CMS。 直接文件链接:localhost / files / questions / 20160917070900-w2CdE9LZpE.zip

我在网上搜索但没有找到任何好的答案。请建议我怎么做。

2 个答案:

答案 0 :(得分:2)

进入文件夹成员创建新文件夹文件,在此处移动所有歌曲,创建新的.htaccess文件并添加以下行:

Order Deny,Allow
Deny from all

进入文件夹成员创建文件get_file.php并添加以下代码:

if( !empty( $_GET['name'] ) )
{
  // check if user is logged    
  if( is_logged() )
  {
    $file_name = preg_replace( '#[^-\w]#', '', $_GET['name'] );
  $question_file = "{$_SERVER['DOCUMENT_ROOT']}/files/questions/{$file_name}.zip";
  if( file_exists( $question_file ) )
  {
    header( 'Cache-Control: public' );
    header( 'Content-Description: File Transfer' );
    header( "Content-Disposition: attachment; filename={$question_file}" );
    header( 'Content-Type: application/zip' );
    header( 'Content-Transfer-Encoding: binary' );
    readfile( $question_file );
    exit;
   }
  }
}
die( "ERROR: invalid song or you don't have permissions to download it." );

获取文件的URL:localhost / get_file.php?name = file_name

答案 1 :(得分:1)

将要保护的文件放在单独的目录中,并添加.htaccess文件,其中包含以下内容:

Order deny,allow
Deny from all

访问此目录中文件的服务器和脚本仍然有效,但url不会直接访问。