Подтвердить что ты не робот

PHP: как я могу заблокировать прямой доступ к URL-адресу для файла, но все-таки разрешить его загрузку вошедшим в систему пользователям?

У меня есть веб-сайт, где пользователи должны иметь возможность войти в систему и прослушать песню (созданный самостоятельно mp3). Я хочу сделать так, чтобы зарегистрированный пользователь мог прослушивать/скачивать/независимо, а файл должен находиться на сервере (не храниться в базе данных MySQL), но не может быть доступен не-пользователям, у которых есть путь к URL.

Например: скажем, мой mp3 находится на mysite.com/members/song.mp3. Если вы вошли в систему, вы сможете увидеть страницу mysite.com/members/index.php, которая позволит получить доступ к файл song.mp3. Если вы не вошли в систему, страница mysite.com/members/index.php не покажет вам файл song.mp3, и ссылка на него не должна предоставлять доступ.

Я уверен, что это делается через htaccess, и я уже много сделал для Googling и искал здесь. Два ближайших ответа, которые я нашел, были в этом руководстве htaccess http://perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/ и этот вопрос StackOverflow Блокировать прямой доступ в файл через http, но разрешить доступ к PHP скрипт, но не отвечайте на все мои вопросы, чтобы соответствовать моим критериям. Что мне не хватает?

4b9b3361

Ответ 1

В члены папки создайте новые файлы папок, переместите сюда все свои песни, создайте новый файл .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

Ответ 2

Единственное, что вы можете сделать для этого через .htaccess, - это реферирование, которое приходит с вашего сайта, и оно НЕ безопасно. это не так просто, чтобы подделать референта, и любой может сосать ваш сайт сухим.

ТОЛЬКО вы можете иметь только зарегистрированные пользователи, загружающие файл, путем размещения файла OUTSIDE вашего веб-сайта и получения посреднического доступа PHP script. Короче говоря:

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

Ответ 3

Используете ли вы язык сценариев, например PHP, для обработки вашего сайта? если это так, лучший способ - создать script, который обрабатывает "доставку" содержимого. Сохраните содержимое в защищенном каталоге, то есть над вашей папкой http или www. Затем, когда пользователь войдет в систему, ссылка на ваш контент будет выглядеть следующим образом:

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

script найдет нужную песню по идентификатору, а затем представит данные пользователю