@@ -181,10 +181,16 @@ static zend_observer_fcall_handlers observer_fcall_init(zend_execute_data *execu
181
181
182
182
if (ZT_G (observer_observe_all )) {
183
183
return (zend_observer_fcall_handlers ){observer_begin , observer_end };
184
- } else if (ZT_G (observer_observe_includes ) && !fbc -> common .function_name ) {
185
- return (zend_observer_fcall_handlers ){observer_begin , observer_end };
186
- } else if (ZT_G (observer_observe_functions ) && fbc -> common .function_name ) {
187
- return (zend_observer_fcall_handlers ){observer_begin , observer_end };
184
+ } else if (fbc -> common .function_name ) {
185
+ if (ZT_G (observer_observe_functions )) {
186
+ return (zend_observer_fcall_handlers ){observer_begin , observer_end };
187
+ } else if (ZT_G (observer_observe_function_names ) && zend_hash_exists (ZT_G (observer_observe_function_names ), fbc -> common .function_name )) {
188
+ return (zend_observer_fcall_handlers ){observer_begin , observer_end };
189
+ }
190
+ } else {
191
+ if (ZT_G (observer_observe_includes )) {
192
+ return (zend_observer_fcall_handlers ){observer_begin , observer_end };
193
+ }
188
194
}
189
195
return (zend_observer_fcall_handlers ){NULL , NULL };
190
196
}
@@ -250,12 +256,33 @@ static void fiber_suspend_observer(zend_fiber_context *from, zend_fiber_context
250
256
}
251
257
}
252
258
259
+ static ZEND_INI_MH (zend_test_observer_OnUpdateCommaList )
260
+ {
261
+ zend_array * * p = (zend_array * * ) ZEND_INI_GET_ADDR ();
262
+ if (* p ) {
263
+ zend_hash_release (* p );
264
+ }
265
+ * p = NULL ;
266
+ if (new_value && ZSTR_LEN (new_value )) {
267
+ * p = malloc (sizeof (HashTable ));
268
+ _zend_hash_init (* p , 8 , ZVAL_PTR_DTOR , 1 );
269
+ const char * start = ZSTR_VAL (new_value ), * ptr ;
270
+ while ((ptr = strchr (start , ',' ))) {
271
+ zend_hash_str_add_empty_element (* p , start , ptr - start );
272
+ start = ptr + 1 ;
273
+ }
274
+ zend_hash_str_add_empty_element (* p , start , ZSTR_VAL (new_value ) + ZSTR_LEN (new_value ) - start );
275
+ }
276
+ return SUCCESS ;
277
+ }
278
+
253
279
PHP_INI_BEGIN ()
254
280
STD_PHP_INI_BOOLEAN ("zend_test.observer.enabled" , "0" , PHP_INI_SYSTEM , OnUpdateBool , observer_enabled , zend_zend_test_globals , zend_test_globals )
255
281
STD_PHP_INI_BOOLEAN ("zend_test.observer.show_output" , "1" , PHP_INI_SYSTEM , OnUpdateBool , observer_show_output , zend_zend_test_globals , zend_test_globals )
256
282
STD_PHP_INI_BOOLEAN ("zend_test.observer.observe_all" , "0" , PHP_INI_SYSTEM , OnUpdateBool , observer_observe_all , zend_zend_test_globals , zend_test_globals )
257
283
STD_PHP_INI_BOOLEAN ("zend_test.observer.observe_includes" , "0" , PHP_INI_SYSTEM , OnUpdateBool , observer_observe_includes , zend_zend_test_globals , zend_test_globals )
258
284
STD_PHP_INI_BOOLEAN ("zend_test.observer.observe_functions" , "0" , PHP_INI_SYSTEM , OnUpdateBool , observer_observe_functions , zend_zend_test_globals , zend_test_globals )
285
+ STD_PHP_INI_ENTRY ("zend_test.observer.observe_function_names" , "" , PHP_INI_SYSTEM , zend_test_observer_OnUpdateCommaList , observer_observe_function_names , zend_zend_test_globals , zend_test_globals )
259
286
STD_PHP_INI_BOOLEAN ("zend_test.observer.show_return_type" , "0" , PHP_INI_SYSTEM , OnUpdateBool , observer_show_return_type , zend_zend_test_globals , zend_test_globals )
260
287
STD_PHP_INI_BOOLEAN ("zend_test.observer.show_return_value" , "0" , PHP_INI_SYSTEM , OnUpdateBool , observer_show_return_value , zend_zend_test_globals , zend_test_globals )
261
288
STD_PHP_INI_BOOLEAN ("zend_test.observer.show_init_backtrace" , "0" , PHP_INI_SYSTEM , OnUpdateBool , observer_show_init_backtrace , zend_zend_test_globals , zend_test_globals )
0 commit comments