Реализация PHP загрузчик файлов.Некоторые основные технические вопросы - PullRequest
1 голос
/ 10 декабря 2010

В настоящее время я работаю над загрузчиком файлов (что-то вроде Rapidshare), но в очень небольшом масштабе.

  • Однако меня беспокоит одна вещь: как мне организовать файлы?Если я помещу все файлы в один загруженный каталог, довольно скоро (примерно через месяц) число файлов в этом каталоге достигнет миллиона.Замедлит ли это что-нибудь в моей системе?Будет ли доступ к файлам и поиск занимать больше времени?Как мне противостоять этой проблеме?

  • Кроме того, я планирую реализовать загрузку с нескольких серверов.Это означает, что администратор может выбрать несколько серверов, куда файл может быть загружен.Как это будет работать?Будет ли пользователь загружать данные на мой сервер, а мой сервер будет мгновенно загружаться через FTP или каким-либо другим механизмом на другой сервер?

  • Пользователи не должны иметь возможность загружать файл через менеджер загрузок.,Кроме того, функциональность возобновления не должна поддерживаться для обычных пользователей.Как мне это реализовать.Могу ли я предоставить прямой доступ к местоположению файла пользователю, загружающему файл?Или мне придется «подать» файл, используя скрипт и fopen, fread и print ?

Спасибо за вашу помощь, я действительно ценю любые ответы.

1 Ответ

4 голосов
/ 10 декабря 2010

Честно говоря, похоже, что вам не хватает какого-то большого опыта, почти необходимого для реализации системы, подобной описанной. Кроме того, «в очень малых масштабах» определенно противоречит миллиону файлов менее чем за месяц.

Я постараюсь дать ответы на ваши вопросы.

  1. Организация файлов заключается в том, чтобы дать им разумные имена. Если вы позволяете пользователю выбирать имя файла, следите за тем, чтобы вы правильно фильтровали его, чтобы блокировать атаки на основе имен файлов, таких как "../../../etc/passwd" (вы ДОЛЖНЫ это понимать.). Я рекомендую использовать хэши в качестве имен файлов. Кроме того, вы можете назначить им публичные «имена файлов» (фактически псевдонимы через базу данных). После загрузки рассчитайте хеш файла. Если количество файлов увеличивается, вы можете хранить их в каталогах, названных в честь первых 2 символов хэша. Это то, что делает Git VCS, и мне действительно это нравится.

  2. Что именно вы подразумеваете под этим? Если вы планируете иметь один сервер загрузки и зеркалировать загруженные файлы на другие серверы, вы можете легко разделить эти процессы. Создайте страницу простой загрузки и напишите другой зеркальный скрипт, который отправляет файлы, например через FTP на другие серверы. В противном случае, если вы собираетесь создать нечто, называемое кластером (несколько веб-серверов для одной и той же цели, выполняющих балансировку нагрузки и обеспечивающих высокую доступность), то нет короткого ответа о том, как это сделать. Многие мудрецы зарабатывают много денег, потому что у них есть необходимый опыт и навыки для внедрения таких систем. Если вы достаточно заинтересованы, чтобы сделать это самостоятельно, вам следует прочитать некоторые книги об этом.

  3. Я не хочу подвергать сомнению вашу мотивацию, но почему вы хотите запретить использование менеджеров загрузок? Они очень полезны для возобновления прерванных загрузок и, таким образом, помогают снизить трафик вашего сервера. Это экономит трафик, пропускную способность, энергозатраты и время процессора. Это слишком плохо для тебя? С технической точки зрения вам необходимо настроить HTTP-сервер, например, например. Apache, чтобы отключить резюме. Я понятия не имею, что это за подходящий вариант, но я считаю, что он есть. В качестве альтернативы вы можете предоставить файлы с помощью сценария PHP вместо прямой ссылки на файл. Сценарий получает идентификатор файла с помощью параметра URL и отправляет содержимое файла (которое в этом случае не должно находиться в корневом каталоге WWW) обратно клиенту. Таким образом, вы несете ответственность за внедрение резюме или нет, и, таким образом, вы можете легко «отключить» его. Если вы действительно хотите избежать нескольких загрузок, я бы рекомендовал использовать сложные идентификаторы, такие как хэши (никто не может угадать ссылку для загрузки файла), и реализовать некоторый скрипт, который удаляет файл после полной загрузки. Как я уже сказал, отключение менеджеров загрузки наносит вред вам и вашим пользователям.

Надеюсь, это поможет получить общее представление о сложности вашей идеи.

...