在 PHP-5.2.17 的 Zend/zend_execute_API.c 第 358 行
为什么要“zend_is_executing(TSRMLS_C)”?
如果您查看源代码,您会看到它get_active_function_name
尝试访问执行程序 global function_state_ptr
。
问题是,这个 executor global 仅在 PHP 代码实际执行时才被初始化。例如,如果一个扩展在调用函数get_active_function_name
之前尝试调用,那么如果省略-check,可能会导致 PHP 解释器崩溃。execute
get_active_function_name
zend_is_executing
因此,检查会阻止get_active_function_name
访问未初始化的值,这反过来可能会导致大问题(这只是说“未定义行为”的另一种方式)。