php中动态修改ini配置(5)
2,configuration_hash的回收发生在EG(ini_directives)之后,上面贴出的代码中有关于php_shutdown_config的函数调用。php_shutdown_config主要负责回收configuration_hash。
int php_shutdown_config(void)
{
// 回收configuration_hash
zend_hash_destroy(&configuration_hash);
...
return SUCCESS;
}
注意zend_hash_destroy并不会释放configuration_hash本身的空间,同XXX_G访问的模块全局空间一样,configuration_hash也是一个全局变量,无需手动回收。
3,当php_shutdown_config完成时,只剩下EG(ini_directives)的自身空间还没被释放。因此最后一步调用zend_ini_shutdown。zend_ini_shutdown用于释放EG(ini_directives)。在前文已经提到,此时的EG(ini_directives)理论上是一张空的hash表,因此该HashTable本身所占用的空间需要被释放。
ZEND_API int zend_ini_shutdown(TSRMLS_D)
{
// EG(ini_directives)是动态分配出的空间,需要回收
zend_hash_destroy(EG(ini_directives));
free(EG(ini_directives));
return SUCCESS;
}
4,总结
用一张图大致描述一下和ini配置相关的流程: