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 )