2015-05-15 3 views
1

У меня есть php-Script, который сохраняет некоторые данные в XML-файле. Но если два пользователя сохраняют некоторые данные в одно и то же время, XML становится сломанным и все данные теряются.Сломанный XML-файл после сохранения XML-файла одновременно в php

Вот мой код:

$dom      = new DOMDocument(); 
$dom->preserveWhiteSpace = false; 
$dom->load($szFile); 

... Действия ...

$dom->formatOutput = true; 
$dom->save($szFile); 

Есть ли рекомендовать способ сохранить XML-файл без этой проблемы?

+0

Если запрос второго пользователя включает в себя 'If-Match' заголовок HTTP, сервер может обнаружить ли уже файл изменен и возвращать 412, предотвращая перезапись файла. –

+0

похоже на разрешение на запись в файл, а не на xml или dom. Возможно, вы привлекаете больше ответов путем – michi

ответ

0

Может быть, я должен переименовать файл, чтобы убедиться, что никто не может его решить?

Open:

function openXML($szFile){ 

    $szPath = '../path/'; 
    $szDummyFile = 'dummy.xml'; 

    $i = 0; 
    $bRepeat = true; 
    $bContinue = false; 
    while($i < 20 && $bRepeat){ // Timeout: 10 s 

    if(file_exists($szPath . $szFile)){ 

     rename($szPath . $szFile, $szPath . $szDummyFile); 
     $bRepeat = false; 
     $bContinue = true; 
    }else{ 
     usleep(500000); // 0,5 s 
    } 
    $i++; 
    } 

    if($bContinue){ 
    $dom      = new DOMDocument(); 
    $dom->preserveWhiteSpace = false; 
    $dom->load($szPath . $szDummyFile); 

    return $dom; 

    }else{ 
    return false; 
    } 
} 

Сохранить:

function saveXML($dom, $szFile){ 

    $szPath = '../path/'; 
    $szDummyFile = 'dummy.xml'; 

    $dom->formatOutput = true; 
    $dom->save($szPath . $szDummyFile); 

    rename($szPath . $szDummyFile, $szPath . $szFile); 

} 
Смежные вопросы