2

Итак, у меня есть веб-сервер LAMP, размещенный на Raspberry Pi 3. Raspberry Pi имеет RAID 10, подключенный к нему через аппаратный контроллер RAID. Моя цель - иметь возможность загружать большие файлы через мою веб-страницу с помощью PHP через установку стека LAMP на Raspberry Pi.

Я могу успешно загрузить файл размером 0,97 ГБ, но не 1,32 ГБ, поэтому я должен предположить, что размер загружаемого файла должен быть примерно 1 ГБ.

В php.ini у меня есть следующий набор прямо сейчас:

  • memory_limit: 1000M
  • post_max_size: 4G
  • upload_max_filesize: 4G
  • upload_tmp_dir: /mnt/raid10/Files/Temp (Это на подключенном RAID, так что это не просто дамп файла на SD-карту, которую использует Raspberry Pi. Обратите внимание, что добавление этого факта помогло увеличить максимальный размер до более низкого.)

Я не могу понять, какие другие настройки я должен попытаться настроить, и я открыт для любых предложений.

1 ответ1

2

Снятие ограничений на размер загружаемого файла

Чтобы настроить установку LAMP (Linux, Apache, MySQL, PHP), которая позволяет пользователю загружать большие файлы на свой сервер, необходимо сделать следующее:

Измените следующие переменные в php.ini

  1. memory_limit = 1000M - установить ограничение памяти на то, что доступно в системе
  2. post_max_size = 4G - убедитесь, что это значение больше или равно значению upload_max_filesize
  3. upload_max_filesize = 4G - установите это на то, что вы хотите, чтобы максимум был
  4. upload_tmp_dir: /mnt/raid10/Files/Temp - по умолчанию это отключено, что делает временное расположение на том же диске, где установлена ОС. В моем случае запускать все с Raspberry Pi, что делает его SD-картой. Чтобы иметь меньше ограничений, я установил вместо этого местоположение моего сетевого диска.

После выполнения вышеизложенного ограничение размера загружаемого файла - это физическая память, доступная для устройства, независимо от того, что установлено для memory_limit , и ограничения файловой системы (4 ГБ для файловой структуры FAT). В случае моего Raspberry Pi 3 это было 1 ГБ.

Обход ограничения памяти для загрузки файла, превышающего объем доступной памяти

Единственный способ преодолеть ограничение памяти - разделить загрузку. После включения чанкинга во время загрузки происходит следующее:

  1. Загрузка начата на веб-странице.
  2. Данные из исходного файла передаются в память веб-сервера.
  3. Данные сбрасываются из памяти веб-сервера во временное местоположение файла.
  4. Как только временный файл достигает установленного размера порции, эти данные сбрасываются в файл конечного расположения и временный файл удаляется.
  5. Повторите шаг 2, пока файл не будет завершен.

Как использовать чанкинг

Если вы используете обработчик загрузки, похожий на этот (https://github.com/blueimp/jQuery-File-Upload/blob/master/server/php/UploadHandler.php), то доступно множество встроенных опций.

В моем случае, когда объявлена #fileupload, я добавил строку для maxChunkSize:

$('#fileupload').fileupload({
    maxChunkSize: 10 * 1024 * 1024, // 10 MB <-----This is the line I added
    add: function (e, data) {
       blah blah blah
    }
    });
}
});

Какое бы значение здесь ни ставилось, будет использоваться размер чанка. Выбранный вами размер требует небольших экспериментов, так как небольшой размер значительно замедлит скорость загрузки, а слишком большой размер приведет к тому, что пользователь сайта не будет видеть прогресс на своей панели прогресса в течение достаточно долгого времени. Для меня 10МБ было счастливым носителем.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .