39

私は、ユーザーがログインして曲を聴くことができるはずのWebサイトを持っています(自作のmp3)。ログインしたユーザーがリッスン/ダウンロード/何でもできるようにしたいのですが、ファイルはサーバー上に存在する必要があります(MySQLデータベースには保存されません)が、パスを持っている非ユーザーはアクセスできませんURLに。

例:私のmp3がmysite.com/members/song.mp3にあるとします。ログインしている場合は、曲へのアクセスを許可するmysite.com/members/index.phpページが表示されるはずです。 mp3ファイル。ログインしていない場合、mysite.com / members / index.phpページにはsong.mp3ファイルが表示されないため、このファイルに直接リンクしてもアクセスは許可されません。

これはhtaccessを介して行われると確信しています。すでに多くのグーグルを実行しており、ここで検索しました。私が見つけた2つの最も近い答えは、このhtaccessガイドhttp://perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/とこのStackOverflowの質問です。http経由でファイルへの直接アクセスをブロックしますが、phpスクリプトアクセスは許可しますがどちらも私の基準を満たすために私のすべての質問に答えません。私は何が欠けていますか?

4

3 に答える 3

61

フォルダメンバーに新しいフォルダファイルを作成し、ここにすべての曲を移動し、新しい.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

于 2011-08-19T21:45:42.807 に答える
7

.htaccessを介してこれを行うことができる唯一のことは、サイトからのリファラーを要求することであり、安全ではありません。リファラーを偽造することは簡単なことではなく、誰もがあなたのサイトを乾燥させる可能性があります。

ログインしたユーザーのみにファイルをダウンロードさせる唯一の方法は、ファイルをWebルートの外部に配置し、PHPスクリプトにアクセスを仲介させることです。要するに:

if (is_logged_in()) {
   readfile($name_of_file);
} else {
   die("Access denied");
}
于 2011-08-19T20:44:37.133 に答える
3

PHPなどのスクリプト言語を使用してWebサイトを処理していますか?その場合、最良の方法は、コンテンツの「配信」を処理するスクリプトを作成することです。保護されたディレクトリ、つまりhttpまたはwwwフォルダの上にコンテンツを保存します。次に、ユーザーがログインすると、コンテンツへのリンクは次のようになります。

http://yoursite.com/listen.php?song_id=xxx

スクリプトはIDで必要な曲を見つけて、データをユーザーに提示します

于 2011-08-19T20:43:07.877 に答える