2013-03-02 78 views
0

的末尾追加我有以下格式 -標籤在XML文件

<?xml version="1.0"?> 
<db> 
<count></count> 
<uid></uid> 
<score></score> 
</db> 

我加入了上千項到我的xml文件的XML文件。

我在php中使用simplexml來解析我的xml。我打開一個XML文件,像這個 -

$result= new SimpleXMLElement($file, null, true); 

和關閉它像這個 -

file_put_contents($file, $data->asXML()); 

雖然一切都可以正常使用,當我在我的LocalServer運行。但是,當我在網上上傳此上我的服務器,它的工作原理好嗎了一段時間,並在一段時間後,這個被我的xml文件

<?xml version="1.0"?> 
<db> 
<count></count> 
<uid></uid> 
<score></score> 
</db> 
/score></db> 

的末尾追加,我得到一個解析錯誤 -

在xml文件

的末尾追加

不需要的數據我很困惑什麼是錯的,因爲它適用於我的LocalServer完美的罰款。這是我的代碼錯誤還是服務器?

編輯: 計數,uid和分數預填充。我只是更新分數。 這裏是更新的分數代碼本部

$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()); 
+0

我們需要看到保存前添加元素的代碼。 – prodigitalson 2013-03-02 17:33:05

+0

我認爲你正在使用可能導致問題的str_replace – Vineet1982 2013-03-02 17:33:31

+0

編輯我的ans以包含更新xml文件的代碼。 – 2013-03-02 17:45:10

回答

1

雖然它沒有作出很清晰的在the manual page,似乎的file_put_contents默認行爲是鎖定被寫入文件。這可能意味着兩個PHP進程都試圖同時覆蓋該文件,這可能是您損壞的原因。

爲了消除這種可能性,你可以傳遞LOCK_EX標誌作爲第三個參數,即file_put_contents($file, $data->asXML(), LOCK_EX);

(我不知道如何測試這個假設,因爲這很可能是一個罕見的競爭狀態你是遇到...)

+0

添加LOCK_EX作爲參數後沒有出現該錯誤。我認爲這是我得到這個錯誤的原因。非常感謝拯救我的生命:) – 2013-03-02 20:12:09

+0

只是通知你,我仍然得到同樣的錯誤。 – 2013-03-02 22:28:23