サーバーで 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");
?>