PHP - 解析ini文件并访问单个值

9
在Python中,你可以解析一个.ini文件,并像这样访问单个值:

myini.ini

[STRINGS]
mystring = fooooo
value = foo_bar

script.py

import configparser
config = configparser.ConfigParser()
# ----------------------------------------------------------------------

config.read("myini.ini")

test = config["STRINGS"]["mystring"]
print (test)      #-> OUTPUT: fooooo

我该如何在PHP中实现同样的功能?不幸的是,我没有找到任何示例。


这个函数对你有用吗?链接 - fafl
我已经阅读了那个页面,但我仍然无法弄清楚如何做。也许有人可以指引我正确的方向。 - Black
3个回答

13

不用担心,解析一个 .ini 文件是一种标准方法。(请参见 php 文档中的 parse_ini_file)。

以您的文件为例:

myini.ini

[STRINGS]
mystring = fooooo
value = foo_bar

test.php

$ini_array = parse_ini_file("myini.ini");
print_r($ini_array); # prints the entire parsed .ini file

print($ini_array['mystring']); #prints "fooooo"

请注意,默认情况下parse_ini_file会忽略所有的段落,并将所有ini设置都合并到同一个对象中。如果您想要像在Python示例中一样按部分进行作用域限定,请将process_sections参数(第二个参数)设置为true

test2.php

$ini_array = parse_ini_file("myini.ini", true /* will scope sectionally */);

print($ini_array['mystring']); #prints nothing
print($ini_array['STRINGS']['mystring']); #prints fooooo

2
更新以示范! - mjk
3
我添加了一个处理ini文件的示例,因为PHP默认不支持按节(section)处理。 - mjk
谢谢!我想知道为什么这个没有包含在官方文档中?也许是我错过了。 - Black
请向下滚动到参数部分:http://php.net/manual/zh/function.parse-ini-file.php - mjk
没有关于如何做的示例或信息,你指的是哪里? - Black
显示剩余5条评论

0

从中间的方法来看,要获取匹配部分,需要逐行读取任何INI文件,此时可以使用fgets函数或stream_get_line函数逐行读取,直到找到所需的部分或文件结束(未找到)。

在每一行内,我们可以使用preg_match(使用正则表达式模式)与正在搜索的实际部分名称相匹配。

这种方法的关键是在许多并发请求同时发生时减少内存使用,因此在这种情况下,我们使用具有足够长度的字符串对象作为缓冲区。

祝你好运,伙计。


0

从php.ini中读取单个值并将其存储到变量中的最简单方法是使用ini_get()函数,如下所示:

$php_ini_option_name = 'error_reporting';
$php_ini_option_value = ini_get($php_ini_option_name);
echo "PHP.ini option '" . $php_ini_option_name . "' = " . $php_ini_option_value;

此函数将返回配置选项的字符串值。根据文档,如果值为NULL,则会返回空字符串;如果该选项在php.ini中不存在,则返回FALSE。但是,这并不符合我的经验。从记忆中,如果在php.ini中将值设置为“On”,则ini_get将返回'1'。这会让人期望将值设置为“Off”会返回'0',但通常对我来说它返回了一个空字符串。此外,不存在的选项名称通常也会返回一个空字符串。我不记得是否会处理NULL值,所以您可能需要自己尝试一下。基本上,您需要意识到并准备处理系统针对特殊情况返回的内容。

ini_get应该在所有PHP版本 >=4中都可用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接