Я работаю в базе кода C для расширения PHP. Это расширение определяет несколько php.ini
Настройки. Из того, что я видел, есть два макросы, которые делают это. Они есть PHP_INI_ENTRY_EX
а также STD_PHP_INI_ENTRY_EX
,
PHP_INI_BEGIN()
PHP_INI_ENTRY_EX (...)
STD_PHP_INI_ENTRY_EX (...)
PHP_INI_END()
В чем практическая разница между созданием php.ini
настройка с одним макросом против другого? То есть я могу проследить за белым кроликом вниз по макроотверстию и увидеть окончательный C, который генерируется, но я хочу знать, какие различия в поведении / функциональности у разработчика PHP, использующего эти ini
настройки увидим.
(следующее мое лучшее предположение о том, как все это работает — исправления приветствуются в комментариях)
STD_PHP_INI_ENTRY
а также STD_PHP_INI_ENTRY_EX
Макросы позволяют конечному пользователю-программисту создавать настройки ini, значения которых сохраняются в памяти (и, вероятно, могут быть установлены и извлечены с помощью ini_set
/ini_get
). PHP_INI_ENTRY
а также PHP_INI_ENTRY_EX
Макросы позволяют конечному пользователю-программисту создавать настройки ini, которые запускают функцию обратного вызова один раз, а затем предпринимают некоторые действия в своей собственной программе / расширении (т.е. устанавливают в своей программе некоторое глобальное состояние ish, не связанное с ini-системой PHP).
_EX
версия макроса принять бывшийПараметр tra — этот дополнительный параметр является обратным вызовом, который PHP будет использовать для отображения значения ini в таких местах, как phpinfo
, Например, вы можете видеть ldap.maxlinks
Ини определение здесь с display_link_numbers
Перезвоните. Источник тогда определяет display_link_numbers
обратный звонок здесь.
STD_
макросы предназначены для работы с определенным типом объекта / структур состояния. Используя вышеупомянутое ldap.maxlinks
Например, три ключевых параметра max_links
, zend_ldap_globals
, а также ldap_globals
,
STD_PHP_INI_ENTRY_EX("ldap.max_links", "-1", PHP_INI_SYSTEM, OnUpdateLong,
max_links, zend_ldap_globals, ldap_globals,
display_link_numbers)
Выше, zend_ldap_globals
Параметры — это имя определения структуры, настройка с ZEND_BEGIN_MODULE_GLOBALS
а также ZEND_END_MODULE_GLOBALS
макросы. Вы можете увидеть макросы которые создают zend_ldap_globals
определение здесь. Выше max_links
Параметр — это поле в этой же структуре.
Наконец, ldap_globals
Параметр является экземпляром этой структуры, созданной с помощью PHP_GINIT_FUNCTION
макро. Этот макрос позволяет программисту установить глобальный «per-php-запрос» и (я думаю) это память, в которой PHP будет хранить значение ini. Вы можете увидеть Глобальная настройка ldap для каждого запроса здесь.
Когда вы настроили структуру для хранения состояния ini, как описано выше, вы можете использовать набор предопределенных обратных вызовов PHP (OnUpdateLong
выше), чтобы эти значения автоматически устанавливались, когда пользователь PHP устанавливает значение через php.ini
(или одно из множества других мест PHP ini
значение может быть установлено в зависимости от того, какой PHP_INI
константа, которую вы передали STD_
макрос (PHP_INI_SYSTEM
выше)).
Других решений пока нет …