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?