Значения из /docroot/path1/.user.ini для /docroot/path1/foo.php проявляются в /docroot/path2/bar.php

39 views
Skip to first unread message

Oleksiy Shchukin

unread,
Jun 10, 2016, 10:46:44 AM6/10/16
to highload-php-ru
Привет всем. Прилагаю усилия чтобы разобраться как и на каком .user.ini парсится php-fpm.

Ф-ция, ответственная за это дело -
https://github.com/php/php-src/blob/php-7.0.7/sapi/fpm/fpm/fpm_main.c#L670

Ввиду основных особенностей архитектуры php-fpm -
http://www.php.net/manual/en/install.fpm.configuration.php:
pm.max_requests int
^^ The number of requests each child process should execute before respawning. This can be useful to work around memory leaks in 3rd party libraries.

Как мне кажется, значения из /docroot/path1/.user.ini для /docroot/path1/foo.php могут утекать в /docroot/path2/bar.php
когда /docroot/path1/foo.php
и затем /docroot/path2/bar.php
обрабатываются последовательно одним и тем же fpm worker по воле случая.
Т.к. .user.ini ключики подмешиваются через php_ini_activate_config() в нетрансакционной/неизвлекаемой манере.

Помогите разобраться в архитектуре fpm, переубедите меня, в чём я не прав? Спасибо заранее.

Weirdan

unread,
Jun 10, 2016, 4:47:16 PM6/10/16
to highload-php-ru
В самой функции *_activate_user_config я не вижу ничего, что намекнуло бы, что директивы из path1 могут утечь в path2. Из кеша достается entry по пути, в кеш сохраняется entry тоже по пути, в php_ini_activate_config() все передается с параметром PHP_INI_PERDIR. 

--

---
Вы получили это сообщение, поскольку подписаны на группу "highload-php-ru".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес highload-php-...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.

Oleksiy Shchukin

unread,
Jun 13, 2016, 9:32:15 AM6/13/16
to highload-php-ru
Спасибо за ответ! PHP_INI_PERDIR немного не при делах, т.к. дальше по цепочке вызовов он сверяется лишь для того, чтобы проверить уместен ли каждый ini ключик для использования в контексте .user.ini

В конце выполнения запроса fpm worker подчищает изменения в конфиге через вызов zend_ini_deactivate():

#0  zend_ini_deactivate () at /usr/src/debug/php-5.4.16/Zend/zend_ini.c:120
#1  0x00007f8707eda926 in zend_deactivate () at /usr/src/debug/php-5.4.16/Zend/zend.c:967
#2  0x00007f8707e7a885 in php_request_shutdown (dummy=dummy@entry=0x0) at /usr/src/debug/php-5.4.16/main/main.c:1800
#3  0x00007f8707d39ab4 in main (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/php-5.4.16/sapi/fpm/fpm/fpm_main.c:1961

пʼятниця, 10 червня 2016 р. 23:47:16 UTC+3 користувач Bruce Weirdan написав:
Reply all
Reply to author
Forward
0 new messages