PHP | parse_ini_string 函數

怎樣解析配置字符串

最近更新時間 2021-01-19 15:23:15

parse_ini_string 函數解析配置字符串。

parse_ini_string() 函數定義一個必填參數和兩個可選參數。解析成功後按鍵值對返回聯合數組。ini 字符串的格式參考 php.ini。

函數定義

parse_ini_string ( string $ini , bool $process_sections = false , int $scanner_mode = INI_SCANNER_NORMAL ) : array
// 源文件位於:ext/standard/basic_functions.c
# 函數定義

PHP_FUNCTION(parse_ini_string)
{
  char *string = NULL, *str = NULL;
  size_t str_len = 0;
  zend_bool process_sections = 0;
  zend_long scanner_mode = ZEND_INI_SCANNER_NORMAL;
  zend_ini_parser_cb_t ini_parser_cb;

  ZEND_PARSE_PARAMETERS_START(1, 3)
    Z_PARAM_STRING(str, str_len)
    Z_PARAM_OPTIONAL
    Z_PARAM_BOOL(process_sections)
    Z_PARAM_LONG(scanner_mode)
  ZEND_PARSE_PARAMETERS_END();

  if (INT_MAX - str_len < ZEND_MMAP_AHEAD) {
    RETVAL_FALSE;
  }

  /* 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 string */
  string = (char *) emalloc(str_len + ZEND_MMAP_AHEAD);
  memcpy(string, str, str_len);
  memset(string + str_len, 0, ZEND_MMAP_AHEAD);

  array_init(return_value);
  if (zend_parse_ini_string(string, 0, (int)scanner_mode, ini_parser_cb, return_value) == FAILURE) {
    zend_array_destroy(Z_ARR_P(return_value));
    RETVAL_FALSE;
  }
  efree(string);
}

參數

  • checkini - ini 字符串內容。
  • checkprocess_sections - 如果設置為 true,將返回一個多維數組,包括了配置文件中每一節的名稱和設置。

返回值

  • checkbool - 成功時返回一個關聯數組,失敗時返回 false。

示例1: - 使用 parse_ini_string() 函數解析配置字符串。

<?php
/**
 * PHP parse_ini_string() 函數解析配置字符串。
 *
 * @since Version 1.0.0
 * @filesource
 */

// 定義靜態變量
define('BIRD', 'Dodo bird');

// ini 字符串
$ini = '

[first_section]
five = 5
animal = BIRD

';

// 解析 ini 字符串
// 文件中的靜態變量 BIRD 會自動替換
$arr_ini = parse_ini_string($ini);

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