我的服务器中运行了一个 xml 文件。虽然在我的本地服务器上一切正常,但是当我将它上传到我的服务器上时,并且当很多人使用它时,我的 xml 文件中出现错误。
我在 php 中使用 simplexml 来读取和更新数据。
例如,我的 xml 文件具有以下结构
<?xml version="1.0"?>
<db>
<uid></uid>
<score></score>
</db>
虽然它在一段时间内完美运行,但一段时间后,一些元素会附加到我的 xml 文件中。例如,
<db>
<uid></uid>
<score></score>
</db>/score</db>
或者
<db>
<uid></uid>
<score><//score>
</db>
或者
<db>
<uid></uid>
<core></score>
</db>
然后我得到解析错误。是因为很多人同时写入我的 xml 文件吗?我正在使用 LOCK_EX 所以这应该不是问题
这就是我打开它的方式-
$data= new SimpleXMLElement($file, null, true);
这就是我关闭它的方式-
file_put_contents($file, $data->asXML(), LOCK_EX);
它在我的本地服务器中完美运行。当我将它上传到网上时,它可以正常工作一段时间,但是我的 xml 文件突然发生了奇怪的事情。怎么了?
编辑:
我的更新代码-
<?php
include('functions.php');
$winid= $_GET['wid'];
$loseid=$_GET['lid'];
$winid=intval($winid);
$loseid=intval($loseid);
$file="data.xml";
$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(), LOCK_EX);
header("Location: index.php");
?>