0

我的服务器中运行了一个 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");
?>
4

1 回答 1

0

尝试更改所有出现的$data->score['string']to $data->score->string。看看有没有帮助!

示例:更改$winner=intval($data->score[$winid]);$winner=intval($data->score->$winid);

另外,你不小心在这一行写了两个等号$data->score[$loseid]==$new_lose;

于 2013-03-03T15:55:43.337 回答