@@ -77,6 +77,11 @@ static void fpm_php_disable(char *value, int (*zend_disable)(const char *, size_
7777}
7878/* }}} */
7979
80+ #define FPM_PHP_INI_ALTERING_ERROR -1
81+ #define FPM_PHP_INI_APPLIED 1
82+ #define FPM_PHP_INI_EXTENSION_FAILED 0
83+ #define FPM_PHP_INI_EXTENSION_LOADED 2
84+
8085int fpm_php_apply_defines_ex (struct key_value_s * kv , int mode ) /* {{{ */
8186{
8287
@@ -90,45 +95,57 @@ int fpm_php_apply_defines_ex(struct key_value_s *kv, int mode) /* {{{ */
9095 zend_interned_strings_switch_storage (0 );
9196 php_dl (value , MODULE_PERSISTENT , & zv , 1 );
9297 zend_interned_strings_switch_storage (1 );
93- return Z_TYPE (zv ) == IS_TRUE ;
98+ return Z_TYPE (zv ) == IS_TRUE ? FPM_PHP_INI_EXTENSION_LOADED : FPM_PHP_INI_EXTENSION_FAILED ;
9499 }
95100
96101 if (fpm_php_zend_ini_alter_master (name , name_len , value , value_len , mode , PHP_INI_STAGE_ACTIVATE ) == FAILURE ) {
97- return -1 ;
102+ return FPM_PHP_INI_ALTERING_ERROR ;
98103 }
99104
100105 if (!strcmp (name , "disable_functions" ) && * value ) {
101106 zend_disable_functions (value );
102- return 1 ;
107+ return FPM_PHP_INI_APPLIED ;
103108 }
104109
105110 if (!strcmp (name , "disable_classes" ) && * value ) {
106111 char * v = strdup (value );
107112 PG (disable_classes ) = v ;
108113 fpm_php_disable (v , zend_disable_class );
109- return 1 ;
114+ return FPM_PHP_INI_APPLIED ;
110115 }
111116
112- return 1 ;
117+ return FPM_PHP_INI_APPLIED ;
113118}
114119/* }}} */
115120
116121static int fpm_php_apply_defines (struct fpm_worker_pool_s * wp ) /* {{{ */
117122{
118123 struct key_value_s * kv ;
124+ int apply_result ;
125+ bool extension_loaded = false;
119126
120127 for (kv = wp -> config -> php_values ; kv ; kv = kv -> next ) {
121- if (fpm_php_apply_defines_ex (kv , ZEND_INI_USER ) == -1 ) {
128+ apply_result = fpm_php_apply_defines_ex (kv , ZEND_INI_USER );
129+ if (apply_result == FPM_PHP_INI_ALTERING_ERROR ) {
122130 zlog (ZLOG_ERROR , "Unable to set php_value '%s'" , kv -> key );
131+ } else if (apply_result == FPM_PHP_INI_EXTENSION_LOADED ) {
132+ extension_loaded = true;
123133 }
124134 }
125135
126136 for (kv = wp -> config -> php_admin_values ; kv ; kv = kv -> next ) {
127- if (fpm_php_apply_defines_ex (kv , ZEND_INI_SYSTEM ) == -1 ) {
137+ apply_result = fpm_php_apply_defines_ex (kv , ZEND_INI_SYSTEM );
138+ if (apply_result == FPM_PHP_INI_ALTERING_ERROR ) {
128139 zlog (ZLOG_ERROR , "Unable to set php_admin_value '%s'" , kv -> key );
140+ } else if (apply_result == FPM_PHP_INI_EXTENSION_LOADED ) {
141+ extension_loaded = true;
129142 }
130143 }
131144
145+ if (extension_loaded ) {
146+ zend_collect_module_handlers ();
147+ }
148+
132149 return 0 ;
133150}
134151/* }}} */
0 commit comments