2011-12-20 2 views
1

Мне нужно загрузить пользовательский файл (например, PDF). Что будет больше:Загружает файл через PHP или через прямую ссылку быстрее?

  • отправить этот файл на PHP (с конкретными заголовками),
  • или положить его в HTTP общую папку и получить пользователю общедоступную ссылку, чтобы загрузить его (без справки PHP)?

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

Итак, как я могу измерить время, потраченное PHP на отправку файла, и сколько памяти он может потреблять?

P.S. в первом случае, когда PHP отправляет заголовки и браузер (если будет установлен плагин pdf), он попытается открыть его в браузере, работает ли PHP или выталкивает весь файл после отправки заголовков сразу? Или если плагин не установлен и браузер покажет диалог «Сохранить как», PHP все еще работает?

+2

Время, потраченное PHP для любого из них, незначительно. Что будет иметь значение - это ваше и сетевое подключение клиента. Другими словами: вам не нужно измерять время. Просто реализуйте одно решение. – Gordon

+0

в случае, когда PHP отправит файл, и пользователь будет искать диалог «Сохранить как» и решить, что делать, PHP будет ждать ответа пользователя? память будет использоваться? пока пользователь не решит нажать «Сохранить» или «Отменить», правильно? – user1016265

ответ

2

Там будет очень мало, если вас беспокоит скорость загрузки.

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

+0

Основная проблема здесь - использование памяти. Я думаю, что один Apache будет потреблять меньше памяти, чем Apache + PHP. Похоже, что PHP сохранит потраченную память, даже если пользователь будет думать, что делать в диалоговом окне «Сохранить как». Как вы думаете ? – user1016265

+0

Да, php может использовать больше памяти. Обслуживание файла в виде статического файла, который, как мне кажется, будет самым эффективным, проще всего реализовать. –

1

Ваша главная проблема с PHP является память потребляет - каждое звено создает новый процесс, который был бы, возможно, 8M - 20M в зависимости от того, что делает ваш сценарий, используете ли вы структуру и т.д.

Из интерес, я написал приложение Symfony, чтобы предлагать загрузки, и делать такие вещи, как ограничение параллелизма, ограничение пропускной способности и т. д. Это here, если вы заинтересованы в том, чтобы взглянуть на код. (Я не лицензировал его сам по себе, но я рад сделать его GPL3, если хотите).

+0

это моя забота. Что делать, если 1K люди попытаются открыть каждый собственный файл? В случае, если файлы будут отправляться только Apache, кажется, что расходы на память будут меньше. – user1016265

+0

Правильно. В общем, вы должны использовать только скриптовый процесс, если хотите сделать что-то вроде параллельного ограничения (и даже это может быть сделано Apache, если вы используете нужные дополнительные модули). Если вы просто хотите предложить безопасность на основе пароля/сеанса, то вы можете создать неописуемые структуры каталогов (возможно, включая хэш) и создать символическую ссылку из этой структуры в реальный файл за пределами веб-дерева. Для удаления устаревших папок можно использовать cron-job. – halfer

+0

Замечание: если ваш PHP-процесс занимает 16M, тогда 1000 одновременных пользователей занимают примерно 16G RAM - это нормально, если у вас есть собственный сервер. Но, конечно же, вы можете ограничить свою систему отказом от запросов к избыточным пользователям в периоды занятости. Наконец, стоит сделать некоторые исследования, чтобы узнать, какие уровни запросов вы можете получить разумно: большинство прогнозов популярности сайта переоценены, imo. – halfer

Смежные вопросы