附加在xml文件末尾的标签

时间:2013-03-02 17:28:52

标签: php simplexml

我有一个xml文件,格式如下 -

<?xml version="1.0"?>
<db>
<count></count>
<uid></uid>
<score></score>
</db>

我在我的xml文件中添加了数千个项目。

我在php中使用simplexml来解析我的xml。我正在打开像这样的xml文件 -

$result= new SimpleXMLElement($file, null, true);

然后关闭它 -

file_put_contents($file, $data->asXML()); 

当我在本地服务器上运行时,一切都运行正常,但是当我在我的服务器上在线上传时,它可以正常运行一段时间,一段时间后,这会附加在我的xml文件的末尾

<?xml version="1.0"?>
<db>
<count></count>
<uid></uid>
<score></score>
</db>
/score></db>

我收到解析错误 -

  

在xml文件末尾附加了不需要的数据

我很困惑有什么不对,因为它在我的本地服务器上工作得非常好。这是我的代码错误还是服务器的错误?

修改 计数,uid和分数是预先填充的。我只是更新分数。 以下是更新评分部分的代码 -

$data= new SimpleXMLElement($file, null, true);
$winner=intval($data->score[$winid]);
$loser=intval($data->score[$loseid]);
$exp_winner=expected($loser,$winner);
$new_win=win($winner,$exp_winner);
$exp_loser=expected($winner,$loser);
$new_lose=loss($loser,$exp_loser);
$data->score[$winid]=$new_win;
$data->score[$loseid]==$new_lose;
file_put_contents($file, $data->asXML());

1 个答案:

答案 0 :(得分:1)

虽然在the manual page上没有明确说明,但似乎file_put_contents的默认行为是而不是来锁定正在写入的文件。这可能意味着两个PHP进程都试图同时覆盖该文件,这可能是您损坏的原因。

要消除这种可能性,您可以将LOCK_EX标记作为第三个参数传递,即file_put_contents($file, $data->asXML(), LOCK_EX);

(我不确定如何测试这个假设,因为它似乎是你遇到的罕见的竞争条件......)

相关问题