Я пытаюсь обновить файл XML, если переданное значение соответствует родительскому значению. Обычно один раз в минуту проверяется серия IP-адресов, и результат передается моему php-скрипту следующим образом: http://ipaddress/presence.php?ip=192.168.0.55&present=1
,
XML (sence.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 (sence.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 {}
}
?>
Код выше, я надеялся, обновит <Present>
тег со значением, переданным в URL. Пока ничего не происходит, я не получаю никаких ошибок в файле журнала. У меня действительно было значение $ present внутри оператора IF, написанное в неправильном регистре изначально, которое выдало ошибку относительно неопределенной переменной, которая указала, что код работает так же, как оператор IF.
Любая помощь приветствуется, я смотрел на различные вопросы & Как и в Stackoverflow, и я так далеко, но не могу понять. Надеюсь, что после устранения этого препятствия я смогу добавить код для обновления <LastSeen>
тег в XML.
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 (в том формате, который вы опубликовали), на случай, если ваш ввод не совсем такой, как вы ожидаете.