PHP | parse_ini_file 函数

怎样解析配置文件

最近更新时间 2021-01-19 13:44:10

parse_ini_file 函数解析一个配置文件。

parse_ini_file() 函数定义一个必填参数和两个可选参数。解析成功后按键值对返回联合数组。ini 文件结构和 php.ini 相似。

函数定义

parse_ini_file ( string $filename , bool $process_sections = false , int $scanner_mode = INI_SCANNER_NORMAL ) : array
// 源文件位于:ext/standard/basic_functions.c
# 函数定义

PHP_FUNCTION(parse_ini_file)
{
  char *filename = NULL;
  size_t filename_len = 0;
  zend_bool process_sections = 0;
  zend_long scanner_mode = ZEND_INI_SCANNER_NORMAL;
  zend_file_handle fh;
  zend_ini_parser_cb_t ini_parser_cb;

  ZEND_PARSE_PARAMETERS_START(1, 3)
    Z_PARAM_PATH(filename, filename_len)
    Z_PARAM_OPTIONAL
    Z_PARAM_BOOL(process_sections)
    Z_PARAM_LONG(scanner_mode)
  ZEND_PARSE_PARAMETERS_END();

  if (filename_len == 0) {
    zend_argument_value_error(1, "cannot be empty");
    RETURN_THROWS();
  }

  /* Set callback function */
  if (process_sections) {
    ZVAL_UNDEF(&BG(active_ini_file_section));
    ini_parser_cb = (zend_ini_parser_cb_t) php_ini_parser_cb_with_sections;
  } else {
    ini_parser_cb = (zend_ini_parser_cb_t) php_simple_ini_parser_cb;
  }

  /* Setup filehandle */
  zend_stream_init_filename(&fh, filename);

  array_init(return_value);
  if (zend_parse_ini_file(&fh, 0, (int)scanner_mode, ini_parser_cb, return_value) == FAILURE) {
    zend_array_destroy(Z_ARR_P(return_value));
    RETURN_FALSE;
  }
}

参数

  • checkfilename - 要解析的 ini 文件的文件名。
  • checkprocess_sections - 如果设置为 true,将返回一个多维数组,包括了配置文件中每一节的名称和设置。

返回值

  • checkbool - 成功时返回一个关联数组,失败时返回 false。

示例1: - 使用 parse_ini_file() 函数解析配置文件。

<?php
/**
 * PHP parse_ini_file() 函数解析配置文件。
 *
 * @since Version 1.0.0
 * @filesource
 */

// 定义静态变量
define('BIRD', 'Dodo bird');

// 解析 sample.ini 文件
// 文件中的静态变量 BIRD 会自动替换
$arr_ini = parse_ini_file('sample.ini');

print_r($arr_ini);
Array
(
  [five] => 5
  [animal] => Dodo bird
)
rss_feed