2013-03-03 40 views
0

我有一個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"); 
?> 
+1

'LOCK_EX'在5.1中加入了,您是否在主機服務器上至少使用了這個版本?試試'phpinfo()'來確定。 – leftclickben 2013-03-03 15:14:52

+0

我檢查了PHP版本。這是 - PHP版本5.3.14 – 2013-03-03 15:21:46

+0

好的下一個問題,你怎麼知道它可以在你的本地服務器上運行?您是否有像用戶在託管服務器上那樣同時使用多個用戶?如果沒有,那麼你還沒有真正確認它在本地工作。它不能幫助你直接解決你的問題,但至少如果你能夠在本地重現它,那麼嘗試去調試它會有很少的痛苦。 – leftclickben 2013-03-03 15:24:40

回答

0

嘗試改變的$data->score['string']所有出現$data->score->string。看看它是否有幫助!

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

而且,你不小心寫在這條線$data->score[$loseid]==$new_lose;兩個等號!

+0

我試過了。這是行不通的。它實際上創造了我不想要的額外分數標籤。 – 2013-03-04 06:06:40