我正在运行一个脚本,用于检查XML缓存文件中的货币代码。如果xml缓存不包含货币代码,那么PHP将添加它。像这样:
<currencies>
<currency id="GBP">
<title>Pound Sterling</title>
<loc>United Kingdom, Crown Dependencies (the Isle of Man and the Channel Islands), certain British Overseas Territories(South Georgia and the South Sandwich Islands, British Antarctic Territory and British Indian Ocean Territory)</loc>
<rate>0.6383</rate>
<timestamp>1329398333</timestamp>
</currency>
</currency>
当缓存完全为空并且我第一次运行脚本时,它如上所示运行良好。第二次我以不同的货币运行它,它更新缓存文件BUT没有数据......或者它只是打破了结构。像这样:
<?xml version="1.0"?>
<currencies>
<currency id="GBP">
<title>Pound Sterling</title>
<loc>United Kingdom, Crown Dependencies (the Isle of Man and the Channel Islands), certain British Overseas Territories(South Georgia and the South Sandwich Islands, British Antarctic Territory and British Indian Ocean Territory)</loc>
<rate>0.6383</rate>
<timestamp>1329398333</timestamp>
</currency>
<currency id
最后,如果我再次为第三种货币运行脚本,它会完全修复结构并添加之前错过的所有正确数据!
以下是进行更新的代码:
if(empty($ratesTimeStamp)) {
$newXML = simplexml_load_file('cache/rates.xml');
$child = $newXML->addChild('currency');
$child->addAttribute('id', ''.$to.'');
$child->addChild('title', $toTitle);
$child->addChild('loc', $toLocation);
$child->addChild('rate', $finalRate);
$child->addChild('timestamp', time());
$dom = new DOMDocument('1.0');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($newXML->asXML());
file_put_contents('cache/rates.xml', $dom->saveXML());
}
答案 0 :(得分:0)
好的,这没什么问题。
它打破了文件,因为我在文本编辑器中打开了文件,每次更新文件时,我的文本编辑器询问我是否要更新打开的文件...这样做会导致文件中断原因。
如果我在文本编辑器中关闭该文件并像往常一样运行脚本,那么它可以正常工作!