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']ください$data->score->string。それが役立つかどうかを確認してください!

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

また、この行に誤って等号を 2 つ書きました$data->score[$loseid]==$new_lose;

于 2013-03-03T15:55:43.337 に答える