如果传递的值与父值匹配,我将尝试更新XML文件。基本上每分钟ping一次一系列IP地址,结果被传递给我的php脚本,如下所示:http://ipaddress/presence.php?ip=192.168.0.55&present=1
。
XML(present.XML):
<?xml version="1.0" encoding="UTF-8"?>
<Presence>
<Person IP="192.168.0.55">
<Name>Bob</Name>
<Present>1</Present>
<LastSeen>14/09/2014 01:48:43 pm</LastSeen>
</Person>
<Person IP="192.168.0.56">
<Name>John</Name>
<Present>0</Present>
<LastSeen>13/09/2014 08:32:19 pm</LastSeen>
</Person>
</Presence>
PHP(present.PHP):
<?php
$ip = $_REQUEST['ip'];
$present = $_REQUEST['present'];
// Write latest data to XML file
$Presence = simplexml_load_file('presence.xml');
foreach ($Presence->xpath('//Person') as $Person) {
if ($Person[@IP] == $ip) {
$Person->Present = $present;
}
else {}
}
?>
上面的代码我希望用URL中传递的值更新<Present>
标记。然而什么也没发生,我在日志文件中没有得到任何错误。我在IF语句中确实有$present值,最初是在错误的情况下编写的,这确实引发了一个关于未定义变量的错误,这表明代码与IF语句一样有效。
感谢任何帮助,我看了各种问答;就像Stackoverflow一样,这就是我走到这一步的原因,但我无法理解。一旦我扫清了这个障碍,我就有望添加代码来更新XML中的<LastSeen>
标记。
url需要正确格式化(用&替换$):
http://ipaddress/presence.php?ip=192.168.0.55&present=1
编辑确保在修改后保存
$Presence->asXML('presence.xml');
尝试:
foreach ($Presence->Person as $Person) {
if ($Person->attributes()->IP == $ip) {
$Person->Present = $present;
}
}
此外,请确保您实际上得到了一个XML字符串(以您发布的格式),以防您的输入与您期望的不完全一样。