Разрешить вошедшим в систему пользователям просматривать и загружать файлы (около 250 МБ), для которых обычно 403 доступа запрещены
Я создаю веб-сервер из запасного компьютера в моем доме (с Ubuntu Server 11.04) с целью использования его в качестве диска для обмена файлами, к которому также можно получить доступ через Интернет. Очевидно, я не хочу, чтобы кто-то мог загрузить некоторые из этих файлов, тем более что некоторые из них будут иметь размер 250–750 МБ (видеофайлы, архивы и т. Д.). Так что я бы внедрил систему входа пользователей с PHP и MySQL.
Я провел некоторые исследования здесь и на других сайтах и понимаю, что хорошим способом было бы хранить эти файлы вне публичного каталога (например, / var / private vs. /var/ www). Затем, когда файл запрашивается вошедшим в систему пользователем, выдаются соответствующие заголовки (вероятно, application/octet-stream для автоматической загрузки), буфер сбрасывается, и файл загружается через readfile.
Тем не менее, хотя я представляю, что для небольших файлов, таких как документы, изображения и музыкальные файлы, это будет очень просто, будет ли это возможным для больших файлов, о которых я упоминал?
Если есть альтернативный метод, который я пропустил, я весь слух. Я попытался установить для папок разрешения 750 и аналогичные, но я все еще мог просматривать файл через обычный HTTP в своем браузере, как если бы меня считали частью группы (и когда я устанавливал разрешения, чтобы не получить доступ к файлу, ни один не может PHP).
Дерьмо, а у меня есть какие-нибудь советы, позволяющие людям загружать большие файлы через PHP? Или это должно быть сделано через FTP?
3 ответа
Вам нужен заголовок X-Sendfile. Он проинструктирует ваш веб-сервер обслуживать определенный файл из вашей файловой системы.
Прочитайте об этом здесь: Использование X-Sendfile с Apache/PHP
Это действительно может стать проблемой с большими файлами.
Разве нельзя просто использовать FTP для этого?
HTTP на самом деле не предназначен для больших файлов, но FTP есть.
Упомянутый вами солутон является наилучшим из возможных, когда система учетных записей обрабатывается через PHP и MySQL. Если вы хотите сохранить его в стороне от PHP и позволить серверу выполнять свою работу, вы можете защитить каталог паролем через файл.htaccess. Таким образом, файлы не будут проходить через PHP, но, честно говоря, вам не о чем беспокоиться. Я рекомендую вам пойти с вашим методом.