Как защитить загрузку больших файлов с помощью PHP и/или Apache?

Как защитить загрузку больших файлов с помощью PHP и/или Apache?

У нас есть несколько больших файлов (1-8 ГБ), которые не являются общедоступными. В настоящее время мы обслуживаем их через PHP-скрипт, который буферизует файлы кусками по 1 МБ и записывает их в выходной файл. Это невероятно загружает процессор и замедляет работу сервера, когда активны только несколько загрузок. Мы хотим перенести работу по передаче файлов на Apache или более эффективный метод. Мы используем аутентификацию с помощью cookie. Загрузки FTP недоступны, если только нет способа аутентифицировать сеансы FTP через существующий сеансовый cookie PHP.

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

Любая помощь будет оценена по достоинству.

решение1

X-Sendfile создан специально для этого типа операций. Вы можете прочитать о нем здесьhttp://codeutopia.net/blog/2009/03/06/sending-files-better-apache-mod_xsendfile-and-php/

решение2

mod_auth_tkt выглядит интересно. Вот простое решение, если ваша настройка Apache/PHP размещена на UNIX:

Сохраните ваши загрузки в недоступном через Интернет каталоге, а затем используйте PHP-скрипт для создания уникальных символических ссылок на него. Затем вы можете удалить символические ссылки по истечении указанного периода времени (например, через 24 часа).

Вот пример. Предположим, что ваши файлы хранятся в /private и защищены файлом .htaccess. У вас также есть каталог /public, доступный для записи пользователю, под которым работает Apache.

Псевдокод:

  1. Пользователь переходит на страницу загрузки
  2. PHP-скрипт генерирует уникальный идентификатор загрузки, который будет использоваться в качестве имени файла символической ссылки (пример: 79467404-7585-11df-9ead-0022190d59d2)
  3. PHP-скрипт создает символическую ссылку из /public/79467404-7585-11df-9ead-0022190d59d2 на /private/file1
  4. PHP-скрипт перенаправляет пользователя наhttp://example.com/public/79467404-7585-11df-9ead-0022190d59d2разрешение на загрузку файлов

Затем вы можете использовать cronjob для запуска «find /public -type l -mtime +24 -exec rm {} \;» или чего-то подобного для удаления просроченных символических ссылок. (Примечание: будьте очень осторожны при использовании find для удаления файлов.)

Это решение не мешает кому-либо делиться ссылкой в ​​течение следующих 24 часов, поэтому оно, вероятно, не подходит в ситуациях, когда это имеет значение. Но оно не требует дополнительных модулей Apache и т. д.

решение3

Этот вопрос Serverfaultможет быть связано. В качестве альтернативы вы можете использовать что-то вродеmod_auth_tkt.

решение4

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

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

Домашняя страница — этоhttp://www.net2ftp.com/, это абсолютно бесплатное программное обеспечение.

Связанный контент