Разрешить зарегистрированным пользователям просматривать и скачивать файлы (около 250+ МБ), для которых обычно 403 доступ запрещен

Я создаю веб-сервер из запасного компьютера в моем доме (с Ubuntu Server 11.04) с целью использовать его в качестве диска для обмена файлами, к которому также можно будет получить доступ через Интернет. Очевидно, я не хочу, чтобы кто-либо мог загрузить некоторые из этих файлов, тем более, что некоторые из них будут размером в 250-750 МБ (видеофайлы, архивы и т. Д.). Поэтому я бы реализовал систему входа в систему с PHP и MySQL.

Я провел некоторое исследование здесь и на других сайтах, и я понимаю, что хорошим методом было бы хранить эти файлы вне общедоступного каталога (например, / var / private vs. / var / www). Затем, когда файл запрашивается зарегистрированным пользователем, предоставляются соответствующие заголовки (вероятно, application / octet-stream для автоматической загрузки), буфер очищается, и файл загружается через readfile.

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

Если есть альтернативный метод, который я пропустил, я все уши. Я попытался установить разрешения для папок на 750 и аналогичные, но я все еще мог просматривать файл через обычный HTTP в моем браузере, как если бы я считался частью группы (и когда я установил разрешения, чтобы я не мог получить доступ к файлу, тоже не может PHP).

Дерьмо, пока я занимаюсь этим, какие-нибудь советы, как разрешить людям загружать большие файлы через PHP? Или это нужно сделать через FTP?


person Doug Wollison    schedule 20.08.2011    source источник


Ответы (3)


Вам нужен заголовок X-Sendfile. Он проинструктирует ваш веб-сервер обслуживать определенный файл из вашей файловой системы.

Прочтите об этом здесь: Использование X-Sendfile с Apache / PHP

person Joe    schedule 20.08.2011
comment
Подробнее об этом подходе можно узнать здесь: php.net/manual/en /function.readfile.php#103837 - person 0x6A75616E; 20.08.2011
comment
Это должно быть идеально, это кажется более прямым, чем установка заголовков и чтение файла, верно? - person Doug Wollison; 20.08.2011
comment
Гораздо прямее. Веб-сервер разработан и оптимизирован для максимально эффективного обслуживания файлов, поэтому вы должны позволить ему выполнять свою работу! Создание собственного файлового сервера - это просто дублирование уже существующего кода. Кроме того, это могут быть вещи, о которых вы могли не подумать, например, использование соответствующего сжатия для клиента, правильное определение Content-Type и т. Д. И т. Д. - person Joe; 20.08.2011

Это действительно может стать проблемой для больших файлов.

Разве для этого нельзя просто использовать FTP?

HTTP на самом деле не предназначен для больших файлов, в отличие от FTP.

person PeeHaa    schedule 20.08.2011
comment
Верно, и лично я буду им, но некоторые из пользователей, которых я имею в виду, могут быть не самыми технически подкованными с FTP. Подождите, я могу загрузить файл на PHP через FTP, а не через обычный HTTP, верно? - person Doug Wollison; 20.08.2011

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

person Sebastian Nowak    schedule 20.08.2011