Назад | Перейти на главную страницу

Как мне защитить большие загрузки файлов через PHP и / или Apache?

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

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

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

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 {} \;» или что-то подобное, чтобы удалить просроченные символические ссылки. (NB: будьте очень осторожны при использовании find для удаления файлов.)

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

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

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

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

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

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