Сравните XML в PHP без хеширования - PullRequest
0 голосов
/ 20 декабря 2009

Я читаю канал XML и хотел бы сравнить со старой версией, чтобы проверить наличие обновлений.

На данный момент у меня проблемы с тем, что я не могу сделать копию объекта SimpleXML, а другая проблема в том, что я не уверен, что могу сравнить их напрямую.

Это мой код в его нынешнем виде. Я, очевидно, просто тестирую локальные файлы, но собираюсь в конечном итоге загрузить их из Интернета.

Можно ли спать очень долго? Я думал, что для моей цели часто достаточно 15-минутного интервала.

error_reporting(E_NOTICE);
$file = 'tmbdata_sm.xml';

$xml_old = "";
while(true){
 $xml = simplexml_load_file($file);

 if($xml != $xml_old){
    foreach($xml->channel->item as $item){
        echo $item->title . "\n";
        echo $item->link . "\n";
    }
    $xml_old = clone $xml;
    $xml = "";
 }else{
    echo 'no change';
 }

sleep(60);
}

Ответы [ 2 ]

1 голос
/ 23 декабря 2009

Без определения того, что означает «обновленный» в вашем контексте, боюсь, ваш вопрос может остаться без ответа. Сравнение строк может работать, но лучше и быстрее будет использовать filemtime() , который позволяет узнать, когда в последний раз файл был изменен .

Также вам следует воздерживаться от использования sleep() в бесконечном цикле, как вы делаете. Я не думаю, что PHP работает бесконечно, будет полезно для вашего компьютера или вашего сервера. Правильный способ сделать это: cronjob при использовании UNIX или планировщик задач в Windows.

0 голосов
/ 20 декабря 2009

Я думаю, вы не можете сравнивать простые объекты XML таким образом.

Я бы попытался скачать xml, используя то, что вам удобно (скажем, расширение cURL ), затем сравнить текстовые строки xml, а затем, когда вы обнаружите, что они отличаются, используйте simplexml_load_string() для разобрать текст xml.

...