PHP-директива FCGI и upload_tmp_dir работает неправильно

Я запускаю PHP как FCGI! Я устанавливаю upload_tmp_dir опция как значение /home/domain.com/tmp, Когда выполнено phpinfo() для двойной проверки подтверждается, что указанные выше настройки верны.

Тем не менее, когда происходит фактическая загрузка, файл загрузки временно собирается /tmp каталог с разрешениями apache:apache и когда загрузка полностью завершена только тогда, загруженный файл перемещается в каталог назначения, который был установлен в upload_tmp_dir, После перемещения файла у него есть соответствующие разрешения, которые domainowner:domainowner,

Что происходит с FCGI как описано выше, абсолютно неправильно и отличается от того, что mod_php или же CGI делают! mod_php а также CGI просто начните загружать файл прямо в upload_tmp_dir а затем просто переименуйте файл после завершения загрузки.

У меня есть несколько серьезных проблем по этому поводу:

Представьте, что произойдет, если 20 человек завершат загрузку файла размером около 2 ГБ, одновременно? Загруженные файлы должны быть перемещены в домашний каталог из /tmp, создавая большую бесполезную нагрузку на файловую систему! Таким образом, я подумал, что перемещение гораздо более изобретательно, чем просто переименование файла в том же каталоге?! Кроме того /tmp смонтирован как ext3 и домой как ext4 и что еще хуже /tmp раздел занимает 16 ГБ пространства, что является полной катастрофой из того, что я представил выше?

Вопрос:

Как заставить FCGI использовать upload_tmp_dirДиректива так же, как CGI или же mod_php? Я не нашел документированный способ изменить временный каталог, который он использует.

Пожалуйста помоги!?

2 ответа

Решение

Это не совсем неправильно, между fastCGI и mod_php/cgi очень большие различия - не в последнюю очередь разделение привилегий. С fastCGI веб-сервер ничего не знает о том, как настроен PHP.

Я думал, что перемещение гораздо более изобретательно, чем просто переименовать файл в том же каталоге?!

Существует небольшая разница между переименованием файла в одном каталоге и перемещением файла в одной файловой системе. Однако это не относится к вопросу, который вы обсуждаете здесь. Чтобы файл перешел из Apache в PHP, он должен пройти через сокет - поэтому не имеет значения, если Apache использует другой путь, чем PHP, для хранения файлов.

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

Просто мысль, но вы пытались передать TMPDIR=/home/domain.com/tmp в среду httpd, чтобы mod_fcgid использовал этот каталог для хранения файлов вместо /tmp?

Другие вопросы по тегам