Блокировать доступ к определенным .mp3 файлам в PHP - PullRequest
0 голосов
/ 31 октября 2011

Я хочу разрешить только зарегистрированному пользователю загружать файл .mp3.

Итак, я решил скрыть фактическое местоположение файла .mp3 и разрешить загрузку, используя http://example.com/donwload.php?mp3_name=1

Файл donwload.php проверяет, вошел ли пользователь в систему, и затем использует readfile (), чтобы прочитать местоположение файла в папке, которая не показана пользователю.

Проблема здесь в том, что для доступа к http://example.com/donwload.php?mp3_name=1 для файла .mp3 размером 500 КБ требуется 3 секунды для загрузки (появится диалоговое окно сохранения)

Есть ли другой способ сделать это или быстро прочитать файлы в PHP?

Спасибо Акаша

Ответы [ 3 ]

1 голос
/ 31 октября 2011

Действительно короткий ответ, так как у меня заканчивается.(Предоставлю больше информации позже).Этот ответ также использует альтернативный подход к тому, что вы пытаетесь сделать.

Если возможно, вы должны использовать систему, которая имеет выделенный ACL, поддерживающий все файлы, хранящиеся на нем.Например, если вы используете Amazon S3, вы можете предоставить свой собственный ACL для каждого объекта, который хранится в корзине, и вы также можете создавать ссылки на лету, которые действительны и подписаны всего за X минут.

Учитывая ваш сценарий, вы можете сохранить все файлы MP3, которые у вас есть, на чем-то вроде Amazon S3 (есть и другие, так что вам не нужно использовать S3), а затемПользователь совершает покупку и транзакция подтверждается, вы можете использовать S3 API для генерации ссылки на изображение.

Это будет что-то вроде:

get_object_url( 'my-mp3s.com', 'albums/Foo/bar.mpg')

Затем вы получите URL-адрес, который вы можете предоставить клиенту.Кроме того, вы можете попросить Amazon создать URL-адрес, срок действия которого истек в течение 15 минут.

0 голосов
/ 31 октября 2011

Если у вас есть mp3 на другом сервере, вы можете установить lighttpd с помощью modsecdownload или запустить lighttpd на другом порту, если у вас только одна машина

http://redmine.lighttpd.net/wiki/1/Docs:ModSecDownload

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

Надеюсь, это поможет!

0 голосов
/ 31 октября 2011

Вы можете использовать file_get_contents вместо readfile () http://php.net/manual/en/function.file-get-contents.php

или модуля Apache X-Sendfile.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...