Welcome! Log In Create A New Profile

Advanced

Избежать копирования между client_body_temp_path и php.ini/upload_tmp_dir

January 10, 2016 06:37AM
Вопрос возник в контексте ownCloud/nginx, проблема описана здесь: https://github.com/owncloud/core/issues/21570
Кратко, суть в следующем. Максимальный размер загружаемого в хранилище (через web-интерфейс?) файла задается, кроме прочего, переменной client_max_body_size, которую приходится выставлять в размер максимального ожидаемого к загрузке файла. При загрузке все поступающие с клиента данные сначала полностью сохраняются во временный файл по пути client_body_temp_path и только потом передаются в обработчик загрузки на PHP через fastcgi_pass, где копируются во временный файл по пути php.ini/upload_tmp_dir, откуда уже переносятся на место постоянного хранения. Если файл большой, в память не влезает, это увеличивает требования к свободному месту на сервере, нужно как минимум двойное пространство от размера загружаемых данных, нагружает дисковое i/o при копировании. Можно ли это оптимизировать? Есть подозрение, что сама загрузка в ownCloud реализована не лучшим образом, но вдруг есть возможность настройки на стороне nginx? Например, чтобы необязательно было предварительно все клиентские данные складывать в client_body_temp_path, но сразу порциями по client_body_buffer_size из памяти отдавать обработчику на PHP, который сам сложит все на диск, как ему удобно, а client_max_body_size в таком сценарии только ограничивает максимальный размер клиентского запроса, но не имеет отношения к записи и размеру временного файла по client_body_temp_path.
Subject Author Posted

Избежать копирования между client_body_temp_path и php.ini/upload_tmp_dir

arabesc January 10, 2016 06:37AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 175
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready