我有一個xml文件在我的服務器上運行。雖然在我的本地服務器中一切正常,但是當我將其上傳到我的服務器上,並且很多人使用它時,我的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");
?>
'LOCK_EX'在5.1中加入了,您是否在主機服務器上至少使用了這個版本?試試'phpinfo()'來確定。 – leftclickben 2013-03-03 15:14:52
我檢查了PHP版本。這是 - PHP版本5.3.14 – 2013-03-03 15:21:46
好的下一個問題,你怎麼知道它可以在你的本地服務器上運行?您是否有像用戶在託管服務器上那樣同時使用多個用戶?如果沒有,那麼你還沒有真正確認它在本地工作。它不能幫助你直接解決你的問題,但至少如果你能夠在本地重現它,那麼嘗試去調試它會有很少的痛苦。 – leftclickben 2013-03-03 15:24:40