我希望获得一些关于如何制作执行PHP parse_ini_file的模块化代码,然后使用返回值来运行JSON解码的输入。
我有一个BACnet API,它为自动化系统中的BACnet点返回JSON结构。我编写了以下代码来解码JSON数据,只返回" present-value"字段,然后我在网页上显示该值。
<?php
$url = "http://hostname.lcl:47800/api/v1/bacnet/devices/10100/objects/0.0";
$json = file_get_contents($url);
$json_data = json_decode($json, true);
echo "<b>Room temperature</b>: ". $json_data["present-value"]. " DEG F";
;?>
这很好但我想使这个代码模块化,以便它可以用于许多其他点。
我创建了一个INI文件,其中包含其他点列表以及包含API中JSON数据的URL。
## BACnet Configuration File
# BACnet Object URLs from WACNET Browser API
[bacnet]
SEA_RMT = http://hostname.lcl:47800/api/v1/bacnet/devices/10100/objects/0.0
SEA_SRV_SEA_SV1_01_EXHT = http://hostname.lcl:47800/api/v1/bacnet/devices/10100/objects/0.3
SEA_SRV_SEA_SV1_02_EXHT = http://hostname.lcl:47800/api/v1/bacnet/devices/10100/objects/0.4
SEA_SRV_SEA_SV1_03_EXHT = http://hostname.lcl:47800/api/v1/bacnet/devices/10100/objects/0.5
我想要做的是使用INI文件获取列表中每个点的当前值,然后创建一个变量,该变量是该点的名称,并将其设置为等于&#34;本值&#34;领域。然后我可以在HTML页面上使用PHP变量引用这一点,如下所示:
<?php echo "$SEA_SRV_SEA_SV1_01_EXHT";?>
我从下面的代码开始,但它不起作用。
<?php
// Parse the settings file
$bacnetini = parse_ini_file('/var/www/config/bacnet.ini');
// Parse the keys to variables and add data
foreach ($bacnetini as $key => $value) {
$url = $value;
$json = file_get_contents($url);
$json_data = json_decode($json, true);
$$key = $json_data;
}
?>
我很想得到关于实现这一目标的最佳方式的其他意见,因为我不知道从哪里开始。
我已经查看了其他Stack Overflow问题,但我不知道如何将这些内容整合在一起。
答案 0 :(得分:0)
为什么不尝试这样的事呢?这将允许您在INI文件中创建不会影响脚本的其他部分。
<?php
$bacnetini = parse_ini_file('/var/www/config/bacnet.ini', true);
$data = array();
foreach ($bacnetini['bacnet'] as $key => $url) {
$data[$key] = json_decode(file_get_contents($url), true);
}
var_dump($data['SEA_SRV_SEA_SV1_01_EXHT']);
?>