ユーザーがログインして歌を聴くことができるウェブサイトがあります(自分で作成した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スクリプトへのアクセスは許可します が、基準を満たすためにすべての質問に答えない。私は何が欠けていますか?
フォルダーにmembers新しいフォルダーを作成files、ここにすべての曲を移動し、新しい。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
.htaccessを介してこのためにできることは、サイトからのリファラーが必要なことだけであり、安全ではありません。リファラーを偽造するのは簡単なことではなく、誰でもサイトを乾燥させることができます。
[〜#〜] only [〜#〜]ログインしたユーザーのみがファイルをダウンロードできるようにするには、webrootの外側にファイルを配置し、PHPスクリプトはアクセスを仲介します。要するに:
if (is_logged_in()) {
readfile($name_of_file);
} else {
die("Access denied");
}
PHPなどのスクリプト言語を使用してWebサイトを処理しますか?その場合、コンテンツの「配信」を処理するスクリプトを作成することが最善の方法です。コンテンツを保護されたディレクトリに保存します、つまり、httpまたはwwwフォルダの上にある場合、ユーザーがログインすると、コンテンツへのリンクは次のようになります。
http://yoursite.com/listen.php?song_id=xxx
スクリプトはIDによって必要な曲を見つけ、ユーザーにデータを提示します