1. 云栖社区>
  2. PHP教程>
  3. 正文

php中的ini配置原理详解

作者:用户 来源:互联网 时间:2017-12-01 09:36:06

配置原理

php中的ini配置原理详解 - 摘要: 本文讲的是php中的ini配置原理详解,使用php的同学都知道php.ini配置的生效会贯穿整个SAPI的生命周期。在一段php脚本的执行过程中,如果手动修改ini配置,是不会启作用的。此时如果无法重启apache或者nginx等,那么就只能显式的在php代码中调用ini_set

使用php的同学都知道php.ini配置的生效会贯穿整个SAPI的生命周期。在一段php脚本的执行过程中,如果手动修改ini配置,是不会启作用的。此时如果无法重启apache或者nginx等,那么就只能显式的在php代码中调用ini_set接口。ini_set是php向我们提供的一个动态修改配置的函数,需要注意的是,利用ini_set所设置的配置与ini文件中设置的配置,其生效的时间范围并不相同。在php脚本执行结束之后,ini_set的设置便会随即失效。

因此本文打算分两篇,第一篇阐述php.ini配置原理,第二篇讲动态修改php配置。

php.ini的配置大致会涉及到三块数据,configuration_hash,EG(ini_directives)以及PG、BG、PCRE_G、JSON_G、XXX_G等。如果不清楚这三种数据的含义也没有关系,下文会详细解释。

1,解析INI配置文件
由于php.ini需要在SAPI过程中一直生效,那么解析ini文件并据此来构建php配置的工作,必定是发生SAPI的一开始。换句话说,也就是必定发生在php的启动过程中。php需要任意一个实际的请求到达之前,其内部已经生成好这些配置。

反映到php的内核,即为php_module_startup函数。

php_module_startup主要负责对php进行启动,通常它会在SAPI开始的时候被调用。btw,还有一个常见的函数是php_request_startup,它负责将在每个请求到来的时刻进行初始化,php_module_startup与php_request_startup是两个标识性的动作,不过对他们进行分析并不在本文的探讨范围内。

举个例子,当php挂接在apache下面做一个module,那么apache启动的时候,便会激活所有这些module,其中包括php module。在激活php module时,便会调用到php_module_startup。php_module_startup函数完成了茫茫多的工作,一旦php_module_startup调用结束就意味着,OK,php已经启动,现在可以接受请求并作出响应了。

在php_module_startup函数中,与解析ini文件相关的实现是:

/* this will read in php.ini, set up the configuration parameters,   load zend extensions and register php function extensions   to be loaded later */if (php_init_config(TSRMLS_C) == FAILURE) {    return FAILURE;}

可以看到,其实就是调用了php_init_config函数,去完成对ini文件的parse。parse工作主要进行lex&grammar分析,并将ini文件中的key、value键值对提取出来并保存。php.ini的格式很简单,等号左侧为key,右侧为value。